如果是这样,语法是什么?
假设我希望 Foo 的一个实例与 Bar 的所有实例无关: 在 SQL 中,它只是:
delete from FOO_BAR_MAPPING
where FOO_ID = ?
在 HQL 中,我假设它会是这样的:
delete from Bar.foos foos
where foos.id = :id
(其中 foos 是 Foo 的映射集合)
但似乎是错误的,给出:
org.hibernate.hql.ast.QuerySyntaxException: Bar.foos is not mapped
这甚至可以用 HQL 实现吗?
最佳答案
要回答您的具体问题,不,据我所知,HQL 是不可能的。
我认为您在这里有点混合了 SQL 和 HQL。在 SQL 中,您确实“删除”了记录,当然 hibernate 最终也会这样做。然而,Hibernate/HQL 是从面向对象的思维方式设计的,因此在此上下文中的“删除”意味着您正在删除对象,而不是关联。通常你会做如下的事情:
Foo f = session.get(Foo.class, id);
f.getBars().clear();
session.merge(f);
这会通过您指定的 ID 检索对象,并通过清除它的集合来移除所有 Bar 关联。显然,您必须将 Foo-Bars 关联映射到正确的方向才能使其正常工作。
关于java - 是否可以从与 HQL 的多对多关联中批量删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1201690/