我正在使用 Dozer 将 Hibernate 实体映射到它们的 DTO。一个简化的示例类如下:
@Entity
public class Role {
@Id
@GeneratedValue
@Column(name="RoleId", nullable=false)
public int roleId;
@Column(name="RoleName", nullable=false)
@NotEmpty
public String roleName;
//get + set (not for the roleId since its autogenerated)
}
public class RoleDTO {
private int roleId;
private String roleName;
public RoleDTO(int roleId, String roleName) {
this.roleId = roleId;
this.roleName = roleName;
}
public RoleDTO() {}
//gets + sets
}
现在映射工作正常,但我在尝试进行更新时遇到问题。假设我的数据库中有一个角色(1,“管理员”)。我的视图首先生成带有更新字段的 DTO:
RoleDTO roleDTO = new RoleDTO(1, "admin");
最终,持久化 Role 的类接收 DTO 并通过 Dozer 将其转换为 Entity 类以持久化更改:
Role role = DozerMapper.map(roleDTO,Role.class);
此时,我的角色实体已经丢失了它的ID,大概是因为ID列被定义为自增,而我显然无法更新null-ID实体。
那么我应该如何解决这个问题,以便 ID 和更新的字段都映射到实体?我总是可以将实体对象带入休眠状态,并使用 DTO 中的字段更新其每个字段并将其保存回来,但这会破坏使用 Dozer 的全部目的。
谢谢你的帮助。