【发布时间】:2020-11-22 13:34:24
【问题描述】:
我有 3 个实体:用户、办公室和角色。角色和办公室已存在于数据库中。
在 SQL 中,用户实体以其 id 引用 Office,并以其名称引用 Role。 SQL 中的记录示例:
Role table:
1 | USER
Office table:
1 | Office 1
User table:
John | Doe | john.doe@mail.com | Password123 | 1 | USER
For user table:
1 -> reference to Office
USER -> reference to Role
角色实体:
@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "t_role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")
private String name;
}
办公实体:
@Data
@Entity
@Table(name = "t_office")
public class Office {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")
private String name;
}
用户实体:
@Data
@Entity
@Builder
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name="role", referencedColumnName="name")
private Role role;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "office_id", referencedColumnName="id")
private Office office;
}
问题是:如何在不指定请求正文中的所有 Office 和 Role 对象的情况下保存用户,而只指定 Office 的 id 和 Role 的名称?也许需要使用 DTO 或 Deserializer ? 提前致谢。
我需要这样的请求正文:
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@mail.com",
"password": "Password123",
"officeId": 1,
"role": "USER"
}
而不是这样的请求正文:
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@mail.com",
"password": "Password123",
"office": {
"id": 1,
"name": "Office 1"
},
"role": {
"id": 1,
"name": "USER"
}
}
【问题讨论】:
标签: java json spring-boot rest spring-data-jpa