分离如何在持久化实体的Transactional方法中工作

时间:2018-04-06 11:36:15

标签: java hibernate transactional

我有一个Transactional方法,在其中实体化实例化并使用persist方法插入Hibernate上下文。然后更改实体的某些属性(因此它将反映在数据库中)。如果在实体上调用detach方法然后更改实体的某些属性,将会发生什么。当方法完成(和事务提交)时,Hibernate是否会插入实体并将属性更新到分离调用之前的点?

例如:

@Transactional
public void transactionalMethod(){
    MyEntity entity = new MyEntity();
    getEntityManager().persist(entity);
    entity.setAttribute1(data1);
    entity.setAttribute2(data2);
    getEntityManager().detach(entity);
    entity.setAttribute3(data3);
}

1 个答案:

答案 0 :(得分:1)

好吧,我正在为有类似问题的人回答我自己的问题。

使用Spring Transactional方法时,所有插入都将在事务结束时提交。如果在实体上使用detach,则将放弃所有更新(分离之前或之后),因此在事务完成时不会进行任何更新提交。

如果要将实体重新附加到持久性上下文,可以对实体执行合并或更新方法,然后在事务完成时提交对实体的所有更改。

希望这有帮助。