使用多个EntityManager

时间:2017-03-01 09:43:08

标签: java hibernate

我有一个可以引用同一实体的另一个对象的实体。当我想删除数据库中的对象时,我可以获得ConstraintViolation。因此,我首先搜索具有要删除的对象的引用的实体,并将该值设置为null。我使用criteriaBuilder执行此操作并进行批量更新。 之后我删除了实体。在下一个select语句中,我得到了错误:

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance

可能是我使用了entityManager的两个不同实例。第一个执行批量更新,第二个删除实体。 那么当第二个entityManager进行刷新时会发生什么?还是数据库中第一个entityManager的数据是否也发生了变化?如果是这样,数据库中的语句执行的顺序是什么? 还是我做了另一个错误? 谢谢!

1 个答案:

答案 0 :(得分:0)

问题是批量更新。 hibernate缓存不知道数据库中的更改。因此,缓存中引用的实体不等同于数据库并且崩溃。 我首先必须刷新引用的实体然后它的工作原理。或者,我必须将批量更新更改为" normal"更新我从数据库加载所有实体并将属性设置为null。