一尘不染

是否可以从与HQL的许多关联中批量删除?

hibernate

如果是这样,语法是什么?

假设我希望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甚至可能吗?


阅读 219

收藏
2020-06-20

共1个答案

一尘不染

据我所知,要回答您的特定问题,不,HQL是不可能的。

我认为您在这里混用了SQL和HQL。在SQL中,您确实可以“删除”记录,当然,hibernate也会最终做到这一点。但是,Hibernate /
HQL是基于面向对象的思想设计的,因此在此上下文中的“删除”意味着您正在删除对象,而不是关联。通常,您会执行以下操作:

Foo f = session.get(Foo.class, id);
f.getBars().clear();
session.merge(f);

这将通过您指定的ID检索对象,并通过清除其集合来删除所有Bar关联。显然,您必须按照正确的方向映射Foo-Bars关联才能起作用。

2020-06-20