0

我想要的是一种让 Hibernate 生成 1 条语句来删除所有子项的方法,而不是每个子项 1 条语句。

如果我在 Entity A 和 B 之间有关系,其中 A 是父级, B 可以是多个子级。如果我在实体关系上使用 OrphanRemoval 或 OnCascade delete 等注释,当我删除父级时,自动生成的 sql 会说

delete from table where id=?  - per child

我希望 Hibernate 做的是生成类似的 sql

delete from table where id in (child1,child1)

是否有注释或设置可以让我轻松做到这一点?

我觉得我不是第一个遇到这个问题的人,但是除了编写自己的 sql 并删除注释之外,我找不到任何解决方法。

4

1 回答 1

0

你不能这样做,entityManager.remove()但你可以使用executeUpdate()

Query q = entitiyManager.createQuery("delete from MyEntity m where m.id in :ids)");
q.setParameter("id", <list of ids>);
q.executeUpdate();

在文档中阅读更多信息:https ://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#batch-bulk-hql-update-delete

于 2021-12-08T15:19:01.357 回答