Java - 合并Hibernate bean /实体 - 在saveOrUpdate之前

时间:2011-04-20 17:36:50

标签: java hibernate merge entity


在saveOrUpdate之前合并2个休眠实体的最佳方法是什么 我从用户那里得到一个实体(提交的表格),我想用saveOrUpdate保存它 如果用户bean中不存在Hibernate,那么Hibernate会将所有字段设置为null(用户只能更新部分数据)。
这就是我想要的样子:

//this is the data the submitted from the user form.
PersonEntity entityFromTheClient = getPersonEntityFromClient();

//this is the data that i pull from the db for the merge
PersonEntity entityFromDb = getPersonEntityFromDb(entityFromTheClient.getID()); //entityFromTheClient.getID() = PK

//this is the method that i need to merge entityFromTheClient into entityFromDb
PersonEntity dataMerged = (PersonEntity)SomeUtill.merge(entityFromTheClient,entityFromDb);

//this will save the merged data.
session.saveOrUpdate(dataMerged);

另请注意,Person可以包含其他实体成员@OneToMany @ManyToMany和@ManyToOne

如您所知,此情况仅供更新。插入将是一个不同的故事。

由于

1 个答案:

答案 0 :(得分:1)

当你已经拥有一个Managed Entity从数据库那里工作时,为saveOrUpdate创建第三个对象似乎很奇怪。只需将允许用户更改的字段复制到托管对象并提交您的事务即可。除非你在getFromDB方法中对事务边界做了一些奇怪的事情,否则甚至不需要显式地使用saveOrUpdate。

Transaction tx = session.beginTransaction();

PersonEntity entityFromTheClient = getPersonEntityFromClient();

//this is the data that i pull from the db for the merge
PersonEntity entityFromDb = getPersonEntityFromDb(entityFromTheClient.getID()); 

entityFromDb.setA(entityFromTheClient.getA());
entityFromDb.setB(entityFromTheClient.getB());

tx.commit();

实际的事务处理当然取决于您的框架设置。

就是这样,完成了。如果你想在某种类型的Util中隐藏设置,那很好。根据您提供的信息,没有任何理由让它变得更复杂。