如果是这样,语法是什么?
假设我希望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关联才能起作用。