我有一个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);
}
答案 0 :(得分:1)
好吧,我正在为有类似问题的人回答我自己的问题。
使用Spring Transactional方法时,所有插入都将在事务结束时提交。如果在实体上使用detach,则将放弃所有更新(分离之前或之后),因此在事务完成时不会进行任何更新提交。
如果要将实体重新附加到持久性上下文,可以对实体执行合并或更新方法,然后在事务完成时提交对实体的所有更改。
希望这有帮助。