Java Hibernate使用临时对象更新实体

Java Hibernate使用临时对象更新实体,java,hibernate,transient,Java,Hibernate,Transient,我一直在想,解决这个问题的最佳方法是什么: 我有一个表,我想更新表中的一行。我得到了一个新的瞬态对象,它与表中的一行相关,但某些信息不同(这是需要更新的信息)。 我从DB中检索对象,现在有一个持久对象和一个需要更新DB对象的瞬态对象 我正在使用Hibernate和MySql 最好的方法是什么 编辑:该对象非常复杂,具有指向其他表的外键 谢谢, Ronen.您必须使瞬态对象持久化。您可以通过如下方式与会话关联来实现这一点 DomesticCat fritz = new DomesticCat();

我一直在想,解决这个问题的最佳方法是什么: 我有一个表,我想更新表中的一行。我得到了一个新的瞬态对象,它与表中的一行相关,但某些信息不同(这是需要更新的信息)。 我从DB中检索对象,现在有一个持久对象和一个需要更新DB对象的瞬态对象

我正在使用Hibernate和MySql

最好的方法是什么

编辑:该对象非常复杂,具有指向其他表的外键

谢谢,
Ronen.

您必须使瞬态对象持久化。您可以通过如下方式与会话关联来实现这一点

DomesticCat fritz = new DomesticCat();
fritz.setColor(Color.GINGER);
fritz.setSex('M');
fritz.setName("Fritz");
sess.update(fritz);
.
.
.
fritz.setColor(persistentObject.getColor());
fritz.setId(persistentObject.getId());
.
.
.
您可以使用持久对象来设置瞬态对象的值,如下所示

DomesticCat fritz = new DomesticCat();
fritz.setColor(Color.GINGER);
fritz.setSex('M');
fritz.setName("Fritz");
sess.update(fritz);
.
.
.
fritz.setColor(persistentObject.getColor());
fritz.setId(persistentObject.getId());
.
.
.

感谢您的回复。但这不会创建具有相同数据的新条目。我希望更新现有行,而不是创建重复行。此外,实体(我的家猫)与其他实体的外键非常复杂tables@rperez:如果新对象具有与现有数据库行相同的ID,则不会,它将更新该行。Tom,新对象没有ID,因为它是暂时的,ID生成策略是在保存时设置该ID。我无法手动设置和更新,因为行已与持久对象关联。我遗漏了什么?你的意思是这样的东西(fritz.setId(persistentObject.getId());)不起作用?在我完成fritz.setId(persistentObject.getId())之后;我尝试执行hibernateSession.update(fritz)并获得MySQLIntegrityConstraintViolationException,因为其中一个字段是唯一的,我如何告诉hibernate不要更新它?