java - 使用jpql查找包含给定集合的所有元素的集合的项目

标签 java sql hibernate jpa jpql

我想找到在其标签集中包含所有给定标签的项目。

这里是简化的类:

@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)

我得到包含任何给定标签的项目。这并不奇怪,但我想要包含所有 给定标签的项目。所以我反过来试试:

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 表达它?

最佳答案

诀窍是使用计数:

select i from Item i join i.tags t
where t in :tags group by i.id having count(i.id) = :tagCount

关于java - 使用jpql查找包含给定集合的所有元素的集合的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14340156/

相关文章:

java - 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

Java小程序在本地运行找不到jar中的资源

java - 扩展 log4j 记录器

mysql - 在 mysql 输出中连接两个表显示为 null

sql - 如何在DB2中执行复合sql

java - 外部数据库更改 -> Hibernate -> 客户端

java - 如何在单节点上启动ignite

java - 在停靠模式下启动我的应用程序

sql - MySQL 中针对多个表的高效插入查询

java - 悲观锁中的 OptimisticLockException