【发布时间】:2021-10-26 06:06:45
【问题描述】:
我想在它们的标签集中找到包含 所有 给定标签的项目。
以下是简化的类:
@Entity
class Item {
@ManyToMany
var tags: java.util.Set[Tag] = new java.util.HashSet[Tag]()
}
@Entity
class Tag {
@ManyToMany(mappedBy="tags")
var items: java.util.Set[Item] = new java.util.HashSet[Item]
}
如果我这样尝试
select distinct i
from Item i join i.tags t
where t in (:tags)
我得到了包含 any 的给定标签的项目。这并不奇怪,但我想要包含 all 给定标签的项目。所以我换个方式试试:
select distinct i
from Item i join i.tags t
where (:tags) in t
我收到错误消息org.hibernate.exception.SQLGrammarException: arguments of row IN must all be row expressions。如果tags 只包含一个标签,它就可以工作,但它会失败并不止于此。
如何在 JPQL 中表达这一点?
【问题讨论】:
-
因为我认为你无法将 set 与休眠中的其他数组进行比较。我认为你必须重写你的 sql 查询代码。
-
Query query = session.createQuery("from Stock where stockId in (:code)"); query.setParameterList("code", idList);
-
感谢您在问题中展示了如何获取包含任何给定标签的项目!这就是我一直在寻找的。我可以确认它也适用于
@ElementCollections。
标签: java sql hibernate jpa jpql