当前位置: 首页 > 面试题库 >

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

阎烨
2023-03-14
问题内容

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

以下是简化的类:

@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


 类似资料:
  • 问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数:

  • 如果集合包含具有特定属性值的元素,我想断言(使用JUnit,而不是任何其他依赖项,如hamcrest)。 我发现这个问题如何断言迭代包含具有特定属性的元素?使用危害冠。 一种选择是重写< code>equals方法,只检查我想要比较的属性,但这不是一个好的解决方案。 有没有一种优雅的方法可以使用JUnit 4来实现这一点,或者我应该对其进行编码并循环访问集合以检查值?

  • 问题内容: 我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,喜爱的猫食等等。 Java集中存储了一堆猫,我需要查找所有3岁的猫,或者最喜欢猫粮的Whiskas。当然,我可以编写一个自定义方法来查找那些具有特定属性的Cat,但是这样做会麻烦许多属性。有一些通用的方法吗? 问题答案: 您可以编写一个采用接口实例的方法,该实例定义了一个方法,该方法可以通过所需的任何属性检查来实现。 更好的是,使其

  • 下面是适当的方法签名的样子: (问题领域是扑克;列举奥马哈扑克牌中所有可能的板卡组合。是的,还有其他方法可以解决这个问题,但我正在测试这个方法,因为处理比特比大多数其他选择要快得多。)

  • 我有一个实体,包含s的嵌入式集合。 我想找到集合中与给定参数(字符串)匹配的所有s。 我想在JPQL中实现的一些伪代码: 但是,当我尝试此查询时: 它抛出: 我希望避免使用需要连接多个表的解决方案。这是伪代码,但实际查询中充满了大量复杂的大型企业sql where或and语句。所以越少加入越好。

  • 我在一次采访中被问到以下问题。虽然我用n元树回答了这个问题,但有人告诉我这还不够好。所以,我很好奇,什么是它的最佳解决方案。 输入:整数数组:[2,3,7]和总和:10 输出:加起来等于和的所有数组元素组合(例如2、2、3、3、7等) 谢了小泰