Java 使用Hibernate和多个EntityManager删除数据

Java 使用Hibernate和多个EntityManager删除数据,java,hibernate,Java,Hibernate,我有一个实体可以引用同一实体的另一个对象。当我想删除数据库中的对象时,我可以得到一个ConstraintViolation。因此,我首先搜索具有要删除的对象引用的实体,并将该值设置为null。我使用criteriaBuilder进行此操作,并进行批量更新。 之后,我删除了实体。在下一个select语句中,我得到了错误: org.hibernate.TransientPropertyValueException: object references an unsaved transient ins

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

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance
可能是我使用了entityManager的两个不同实例。第一个执行批量更新,第二个删除实体。 那么,当第二个entityManager进行刷新时会发生什么呢?数据库中来自第一个entityManager的数据是否也发生了更改?如果是,数据库中的语句是按什么顺序执行的? 还是我又犯了一个错误?
谢谢大家!

问题在于批量更新。hibernate缓存不知道数据库中的更改。因此,缓存中引用的实体与数据库不等效,因此它会崩溃。
我首先必须刷新引用的实体,然后它才能工作。或者,我必须将批量更新更改为“正常”更新,从数据库中加载所有实体,并将属性设置为null。

您应该使用CascadeType。我通常希望获得ConstraintViolation,因为它不应该能够删除此类数据。但是在这种特殊情况下,应该允许它从数据库中删除数据。但是我想了解一件事:哪种cascadeType是可以选择的?你可以使用cascadeType.all。你能为同样的内容粘贴代码片段吗?