【发布时间】:2016-03-23 12:30:14
【问题描述】:
1.我有一个具有惰性关联的复杂实体。我将它加载到我的@Viewscoped bean 中的一个属性(它是分离的)。
2.我更改了实体中的一些字段(仍然分离)。
3.现在我需要实体中的惰性对象,因此我将实体合并到持久性上下文并初始化惰性对象,例如:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public MyEntity loadTheLazyObjects(MyEntity myEntity){
//at the beginning myEntity is detached
myEntity = entityManager.merge(myEntity) //it is managed now
myEntity.getSomeLazyCollection.size(); //initialize lazy collection
entityManager.clear(); //myEntity is detached again
return myEntity;
}
我需要合并实体,以便可以加载惰性关联(我需要活动的休眠会话),但我不希望将实体中的更改保存到数据库中。这就是为什么在事务结束之前我将它从持久性上下文中分离出来。会有帮助吗?
我不希望在事务完成时对 myEntity 进行任何 SQL 更新,我猜 hibernate 会在合并后准备要更新的对象,那么分离对象是否会阻止 hibernate 在事务结束之前触发更新?合并过程中可以调用flush吗?
【问题讨论】:
-
您可能会争辩说,由于对象是以这种方式延迟加载的,您不妨创建一个单独的查询来检索它们。我不知道如何不使用合并更新实体。
-
合并的目的是为了合并。如果您需要某种组合对象。从数据库中加载负责的对象并自行合并它们。 f.e.模型映射器
-
代替
merge(),你可以em.find()对应的实体(直到em.clear())并从那里取一个集合。 -
我会这样做的。谢谢你的回答。