我正在尝试删除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>
我做错了什么?
先感谢德国的问候
马
答案 0 :(得分:1)
你可以使用
@OneToOne(cascade = CascadeType.REMOVE)
删除ServiceTicket时会删除报告。
第二: 如果要删除所有等于x的ServiceTickets,可以使用HQL:
Query query = session.createQuery("delete ServiceTicket where something = :x");
query.setParameter("x", "myvalue");
int result = query.executeUpdate();