Java @OneToOne实体的重复条目?
我有一个简单的亲子关系 问题:在我的数据库中,有时有多个子元素映射到同一父元素Java @OneToOne实体的重复条目?,java,hibernate,Java,Hibernate,我有一个简单的亲子关系 问题:在我的数据库中,有时有多个子元素映射到同一父元素 @Entity public class PersonEntity { @Id private long id; //assume every person can only have one car @OneToOne(mappedBy = "person", cascade = CascadeType.ALL, orphanRemoval = true) private
@Entity
public class PersonEntity {
@Id
private long id;
//assume every person can only have one car
@OneToOne(mappedBy = "person", cascade = CascadeType.ALL, orphanRemoval = true)
private CarEntity car;
private String name;
}
@Entity
public class CarEntity {
@Id
private long id;
@OneToOne
@JoinColumn(name = "fk_person_id", foreignkey = @ForeignKey("name = "fk_person"))
private PersonEntity person;
private String name;
}
问题:我怎么可能有多个car
元素映射到同一个人实体?hibernate怎么可能持久化这些元素?他们从哪里来
因此,当我获取具有多个car映射的person实体时,我当然会得到一个异常:
原因:org.hibernate.hibernateeexception:找到了多个具有给定标识符的行:123,对于类:CarEntity…
旁注:我最后想删除重复的CarEntity
,只保留最新的一个。但我怎样才能防止将来发生这种情况呢
更新:
@Transactional
public PersonEntity createUpdatePerson(PersonDTO dto) {
PersonEntity entity = dao.findByPersonName(dto.getName); //CrudRepository by spring
if (entity == null) {
entity = new Person();
}
mergeDTO(dto, entity); //copy and fill new values
if (person.getId() == null) dao.save(entity);
return entity;
}
private void mergeDTO(PersonDTO dto, PersonEntity entity) {
if (dto.getCar() != null) {
if (entity.getCar() == null) entity.setCar(new Car());
entity.getCar().setName(dto.getCar().getName());
entity.getCar().setPerson(entity);
}
}
您的数据库数据仅通过带有hibernate的java应用程序填充??id可能是在您更新一个人并持久化实体时,它为您创建了一辆新车是的,我只使用java hibernate,带有
spring
层。不,我正在用@Transactional
方法包装save/update调用,因此我不会重新生成实体。首先,发布相关代码:这就是创建/保存的地方。其次,在数据库中添加一个唯一的索引,那么至少您会得到一个关于duplicate的异常,这可能有助于识别这个问题。第三,打开SQL日志记录。合并方法呢?您询问的是重复的汽车,但在此区域没有显示代码。显示所有相关代码