2

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エンティティを参照しますReportReportこれが、最初に削除する必要があった理由です。

このコンテキストではエラーは発生しません。ただし、変更はデータベースに書き込まれません。

永続化ユニットの構成は次のとおりです。

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

私は何を間違っていますか?

事前に感謝し、ドイツからよろしく

マルコ

4

1 に答える 1

1

あなたが使用することができます

@OneToOne(cascade = CascadeType.REMOVE)

ServiceTicket を削除すると Report が削除されます。

2 番目: 何かが x に等しいすべての ServiceTicket を削除する場合は、HQL を使用できます。

Query query = session.createQuery("delete ServiceTicket where something = :x");
query.setParameter("x", "myvalue");
int result = query.executeUpdate();
于 2012-04-27T09:48:17.550 に答える