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

ire*_*ick 8 java hibernate hql

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

假设我希望Foo的实例与Bar的所有实例无关联:在SQL中它只是:

delete from FOO_BAR_MAPPING
where FOO_ID = ?
Run Code Online (Sandbox Code Playgroud)

在HQL中,我认为它会是这样的:

delete from Bar.foos foos
where foos.id = :id
Run Code Online (Sandbox Code Playgroud)

(其中foos是Foo的映射集合)

但似乎是错的,给出:

org.hibernate.hql.ast.QuerySyntaxException: Bar.foos is not mapped
Run Code Online (Sandbox Code Playgroud)

这甚至可以用HQL吗?

Mat*_* S. 7

要回答你的具体问题,不,据我所知,HQL是不可能的.

我想你在这里混合了SQL和HQL.在SQL中,你确实"删除"了记录,当然hibernate最终也会这样做.但是,Hibernate/HQL是从面向对象的思维模式设计的,因此在此上下文中的"删除"意味着您要删除对象,而不是关联.通常你会做以下事情:

Foo f = session.get(Foo.class, id);
f.getBars().clear();
session.merge(f);
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,这只会删除关联表条目,而不会删除末尾的元素.要做到这一点,您需要打开delete-orphans. (2认同)