我正在使用 hibernate 实体管理器来删除对象。然而,即使刷新entityManager后,该对象也不会被删除。如果我使用 is id 对它进行 find
操作,它就会被返回。
以下是我的代码:
@PersistenceContext(unitName = "registryPU")
private EntityManager em;
public <E> E delete(Class<E> clazz, String id) {
E en=(E) find(clazz, id);
if(en != null){
em.remove(en);
em.flush();
}
en=(E) find(clazz, id);
assert ( en == null);
return en;
}
public <E> E find(Class<E> clazz, String id) {
return em.find(clazz, id);
}
persistence.xml如下:
<persistence-unit name="registryPU"
transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<validation-mode>CALLBACK</validation-mode>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.connection.charSet" value="UTF-8" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.import_files" value="import.sql"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
<property name="hibernate.event.merge.entity_copy_observer" value="allow"/>
</properties>
</persistence-unit>
</persistence>
理想情况下,这应该可以正常工作,但由于断言语句而引发 java.lang.AssertionError
。有人可以让我知道这有什么问题以及如何避免它吗?
最佳答案
尝试在remove()之后、flush()之前使用它
em.getTransaction().commit();
关于java - Hibernate 实体管理器即使在刷新/刷新后也不会删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345996/