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

How does detach work in a Transactional method on persisted entity

我有一个 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);
}

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

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

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

希望对您有所帮助。