批量删除/更新休眠:最好的方法?

时间:2011-02-21 10:49:55

标签: java hibernate jpa

我知道在hibernate中(甚至在JPA中?)批量删除操作不会级联到相关实体。

假设您有以下实体A,B和C.
B与A有一个ManyToOne关系但是没有反转(因此A没有B的列表)。
C与B具有ManyToOne关系但也没有反转(因此B没有C的列表)。

现在,如果A被删除,那么我希望删除引用此A的所有B,并且还要删除引用这些B的所有C。由于没有级联,我需要自己传播这些删除。所以问题是最好的解决方法是什么:

  1. sql(从C中删除b_id IN(从B中选择a_id in(从A中选择id ...
  2. 使用hibernate:为A加载所有C,然后删除这些实体,然后为A加载所有B并删除它们;最后删除A
  3. ???

2 个答案:

答案 0 :(得分:2)

我认为HQL是更好的选择

答案 1 :(得分:1)

您可以使用hibernate来执行本机sql语句。例如,您可以编写类似的内容:

session.createSQLQuery("delete from C where b_id IN (select is from B where a_id in (select id from A ...");

您可以查看本指南Hibernate native SQL