即使在刷新/刷新后,Hibernate entityManager也不会删除对象

时间:2015-09-02 06:26:55

标签: java hibernate jpa

我正在使用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。有人能让我知道这有什么问题,以及如何避免它?

2 个答案:

答案 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>