java - Hibernate 实体管理器即使在刷新/刷新后也不会删除对象

标签 java hibernate jpa

我正在使用 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/

相关文章:

java - 在 Java JDK 1.6 中,我需要运行一个接受重定向输入的可执行文件

java - 如何使用 Criteria 查询将 String 字段转换为 where 子句中的数字?

java - 从不同的jsp调用相同的servlet以达到不同的目的

java - 如何通过条件查询调用使用mysql关键字作为参数的函数?

java - 为什么两个方法引用被编译成两个不同的地址?

java - Spring 与 Hibernate 的集成测试失败

Hibernate 配置类的 java.lang.NoSuchMethodError 仅出现在 Tomcat 上

jpa - 我可以在接口(interface)上注释@EntityListener 吗?

java - 使用 Spring/Hibernate 进行密码加密 - Jasypt 或其他?

java - 面试问题 - 打印由按升序排序的给定字符串的字符形成的模式