简体   繁体   English

休眠:无法删除实体

[英]Hibernate: Cannot delete Entities

I am trying to delete Entities in a JPA/Hibernate configuration. 我正在尝试删除JPA /休眠配置中的实体。 The database is an embedded HSQL file. 该数据库是嵌入式HSQL文件。

This is code doing the delete: 这是执行删除的代码:

        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();

The ServiceTicket references the entitiy Report . ServiceTicket引用实体Report This is why I had to remove Report first. 这就是为什么我必须先删除Report原因。

I do not get an error in this context. 在这种情况下,我没有得到任何错误。 But the changes are not written to the database. 但是所做的更改不会写入数据库。

Here is the configuration of the persistence unit: 这是持久性单元的配置:

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

What am I doing wrong? 我究竟做错了什么?

Thanks in advance and regards from Germany 在此先感谢您和德国的问候

Marco 马尔科

you can use 您可以使用

@OneToOne(cascade = CascadeType.REMOVE)

It will delete Report when you remove ServiceTicket. 删除ServiceTicket时,它将删除报告。

Second: If you want to delete all ServiceTickets where something equals x you can use HQL: 第二:如果要删除等于x的所有ServiceTicket,可以使用HQL:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM