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

标签 java hibernate hql

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

假设我希望 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/

相关文章:

java - 这个线程对于在java中的队列上共享的两个线程来说是安全的吗?

java - Java 标准输出中的克罗地亚语字符

java - hibernate 的替代品

java - Hibernate Envers - 不为 createQuery(...).executeUpdate() 编写审计记录,只为 .persist() 和 .merge()

java - 异常org.hibernate.exception.GenericJDBCException : could not extract ResultSet while feching data using hql

java - 我们如何通过java传输文件到ALFRESCO

java - 在 Java 中使用 Kotlin 库

java - 使用JPA将arraylist存储在mysql数据库中

hibernate - JPQL选择具有最大值的记录

java - HQL 并检查对象是否为空或对象字段是否具有特定值