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");
最終的に、役割を永続化するクラスはDTOを受け取り、変更を永続化するためにDozerを介してそれをエンティティクラスに変換します。
Role role = DozerMapper.map(roleDTO,Role.class);
この時点で、おそらくID列が自動インクリメントとして定義されているために、ロールエンティティがIDを失い、nullIDエンティティを更新できないことは明らかです。
では、IDと更新されたフィールドがすべてエンティティにマップされるように、この問題にどのようにアプローチする必要がありますか?いつでもエンティティオブジェクトを休止状態にして、その各フィールドをDTOのフィールドで更新して保存し直すことはできますが、Dozerを使用する目的全体が無効になります。
助けてくれてありがとう。