所以,我从SprringBoot开始,对Java有中等的了解.我的问题是,我有一个名为Personnel的实体(或Model,我不知道它是怎么叫的),这个实体有一个指向另一个名为Role的实体的外键,如下所示:
@Entity(name = "Personnel")
public class PersonnelEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "first_name", length = 50, nullable = false)
private String firstName;
@Column(name = "last_name", length = 50, nullable = false)
private String lastName;
//.... other properties
@ManyToOne()
@JoinColumn
(
name = "role_id",
//nullable = false,
foreignKey = @ForeignKey
(
name = "FK_Personnels_role_id",
foreignKeyDefinition = "FOREIGN KEY (role_id) REFERENCES Roles (id) ON DELETE RESTRICT ON UPDATE CASCADE"
)
)
private RoleEntity role;
而且,我有一个针对人员的DTO,它具有除RoleName验证之外的所有验证:
public class PersonnelDto {
@NotBlank
private String firstName;
@NotBlank
private String lastName;
//... other properties
@NotBlank
private String roleName;
来自请求的json显然在幕后被解析到DTO,但我想控制的是,当发出请求时,客户端将在json中发送角色的名称,并使用注释或其他东西判断该名称是否存在于数据库中(因为它是唯一的),如果不存在,则dto不会在任何请求中传递@Valid注释.
另外,我在考虑,也许在DTO中,我不会有一个字符串roleName,但实际的RoleEntity,像这样:
public class PersonnelDto {
@NotBlank
private String firstName;
@NotBlank
private String lastName;
//... other properties
@NotBlank
private RoleEntity role;
但是,我不知道如何编写代码,以便自动查询json中的roleName并转换为整个RoleEntity,我只知道必须有一种方法来做到这一点,例如,您可以将Date放入DTO中,然后Date的json字符串自动转换为Date对象.
因此,在我的例子中,json:
{
"firstName": "val1",
"lastName": "val2",
...,
"roleName": "roleName"
}
会被转换成上面的DTO.
继续,我如何使json中的角色名称在数据库中被判断,如果是这样的话,如何将其转换为DTO中的RoleEntity对象?此外,如果不存在,则DTO将被视为无效.