gpt4 book ai didi

java - hibernate :无法删除实体

转载 作者:行者123 更新时间:2023-11-30 11:45:22 25 4
gpt4 key购买 nike

我正在尝试删除 JPA/Hibernate 配置中的实体。数据库是一个嵌入式 HSQL 文件。

这是执行删除的代码:

        EntityManager em = PersistenceUtility.getInstance().createEntityManager();
EntityTransaction t = em.getTransaction();
t.begin();

List<ServiceTicket> tickets = em.createQuery("from ServiceTicket").getResultList();

for (ServiceTicket ticket : tickets) {
Report report = ticket.getReport();
em.merge(report);
em.merge(ticket);
em.remove(report);
em.remove(ticket);
}

em.flush();
t.commit();

ServiceTicket 引用实体Report。这就是为什么我必须先删除 Report

在这种情况下我没有收到错误。但更改不会写入数据库。

这里是持久化单元的配置:

<persistence-unit name="local_hsql" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Report</class>
<class>ServiceTicket</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.connection.url" value="jdbc:hsqldb:file:etc/database/db1"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.connection.SetBigStringTryClob" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>

我做错了什么?

在此先感谢德国的问候

马可

最佳答案

你可以使用

@OneToOne(cascade = CascadeType.REMOVE)

当你删除 ServiceTicket 时它会删除 Report。

第二个:如果您想删除所有等于 x 的 ServiceTicket,您可以使用 HQL:

Query query = session.createQuery("delete ServiceTicket where something = :x");
query.setParameter("x", "myvalue");
int result = query.executeUpdate();

关于java - hibernate :无法删除实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com