我正在使用hibernates entityManager删除一个对象。但是,即使在刷新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>
理想情况下这应该可以正常工作,但由于assert语句而抛出java.lang.AssertionError
。有人能让我知道这有什么问题,以及如何避免它?
答案 0 :(得分:0)
尝试在remove()之后但在flush()之前使用它
em.getTransaction().commit();
答案 1 :(得分:0)
在<jta-data-source>
中看不到persistence.xml
条目。尝试添加如下:
<persistence-unit name="registryPU"
transaction-type="JTA">
<jta-data-source>jdbc/sample</jta-data-source>
<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>