2
1.我有一个复杂的实体和惰性关联。我将它加载到我的@Viewscoped bean(它是分离的)中的一个属性。禁止在休眠时合并冲洗
2.我改变实体中的一些字段(仍然分离)。
3.Now我需要从我的实体懒惰的对象,所以我合并的持久化上下文和初始化喜欢偷懒对象的实体:
@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. ModelMapper –
而不是'merge()',你可以'em.find()'相应的实体(它将被管理直到'em.clear()')并从那里取得一个集合。 –