当前位置: 首页 > 知识库问答 >
问题:

JPA.筛选字段集包含特定值的实体

尉迟禄
2023-03-14

我有一个实体,其中一个字段是 groups。

@Entity
public class TimetableItem {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;
    
        /*different fields */
    
   @ManyToMany
   @JoinTable(name = "timetable_items_groups",
              joinColumns = @JoinColumn(name = "timetable_item_id"),
              inverseJoinColumns = @JoinColumn(name = "group_id"))
  private Set<Group> groups;

我需要得到所有的时间表项目,其中的集合包含一个特定的组(集合可以有很多不同的组也。如果“我的组”是其中之一-它是我需要的)。

public List<TimetableItem> findItemsWithGroup(Group group) {
   CriteriaBuilder cb = em.getCriteriaBuilder();
   CriteriaQuery<TimetableItem> query = cb.createQuery(TimetableItem.class);
   Root<TimetableItem> root = query.from(TimetableItem.class);

   //something like that but it doesn’t work
   Predicate predicateForGroup = cb.isTrue(root.get(TimetableItem_.GROUPS).in(group));

   query.where(predicateForGroup);
List<TimetableItem> timetableItems = em.createQuery(query).getResultList();

如果在没有任何条件的情况下运行代码,我可以在调试器中看到我的列表 TimeTableItems 包含数据库中的所有项,并且每个项都包含中的组。

截图

当然,我可以“手动”找到我需要的项(例如,使用.stream()),但我肯定有一些方法可以使用谓词来获得它。

共有1个答案

陆臻
2023-03-14

使用CriteriaBuilder.IsMember-方法:

Predicate predicateForGroup = cb.isMember(group, root.get(TimetableItem_.GROUPS));
 类似资料:
  • 我有一个包含多个国家的数据集。如何对其进行筛选,使其仅包含特定国家/地区? 例如,现在它包含英国、比利时、法国等 我想过滤它,使它只显示法国和比利时。 到目前为止,我已经尝试过: 它是有效的,因为它只过滤法国的数据,但如果我加上比利时 它不再工作了。我得到以下错误: 我们将非常感谢您的帮助。

  • 我想在Spring中从基于XML的配置切换到基于Java的配置。现在我们在应用程序上下文中有如下内容: ...它将从两个包中排除服务。我有一种强烈的感觉,我忽略了一些令人尴尬的琐碎事情,但我找不到一种解决方案来将过滤器的范围限制在。

  • 问题内容: 我想在Spring中从基于XML的配置切换为基于Java的配置。现在,我们的应用程序上下文中具有以下内容: 但是如果我写这样的话… …它将从这两个软件包中排除服务。我有一种强烈的感觉,我正在尴尬地忽略一些琐碎的事情,但是找不到解决方案来将过滤器的范围限制为。 问题答案: 你只需要为所需的两个注释创建两个类。 因此,例如,你的包装将有一个类: 然后是你的包裹的二等舱: 然后在实例化Spr

  • 问题内容: 我需要一个棘手的hibernate查询问题的帮助。我有以下实体: 和 两者之间存在多对多关联,这由联接表books_tags_mn和book_id和tag_id列表示。 我喜欢做的事情是:我要创建一个Hibernate查询/标准查询,返回所有的书,有 所有的 一组特定的标签。什么工作是选择具有所有书籍 的任何 一组的标签。 我一直在使用标准API,但并没有真正理解它。所以我想做的事(使

  • 我需要bootstrap vue表中的帮助,如果im筛选字段,正在工作,但是如果im筛选,不起作用 表代码: 这是我的领域 这是我的会员。数据

  • 如何返回特定日期所在的行号? 类似这样的事情: