Я использую 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 и преобразует его в класс Entity через Dozer, чтобы сохранить изменения:
Role role = DozerMapper.map(roleDTO,Role.class);
На этом этапе моя сущность роли потеряла свой идентификатор, предположительно из-за того, что столбец идентификатора определен как автоинкремент, и я, очевидно, не могу обновить сущность с нулевым идентификатором.
Итак, как мне подойти к этой проблеме, чтобы идентификатор и обновленные поля были сопоставлены с сущностью? Я всегда мог перенести объект entity с помощью hibernate и обновить каждое из его полей полями из DTO и сохранить его обратно, но это нарушило бы всю цель использования Dozer.
Спасибо за любую помощь.