Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA。筛选字段集所在的实体<&燃气轮机;包含一定的价值_Java_Jpa_Spring Data Jpa - Fatal编程技术网

Java JPA。筛选字段集所在的实体<&燃气轮机;包含一定的价值

Java JPA。筛选字段集所在的实体<&燃气轮机;包含一定的价值,java,jpa,spring-data-jpa,Java,Jpa,Spring Data Jpa,我有一个实体,其中一个字段是组 @Entity public class TimetableItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /*different fields */ @ManyToMany @JoinTable(name = "timetable_items_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;
@实体
公共类时间表项目{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
/*不同领域*/
@许多
@JoinTable(name=“时间表项目组”,
joinColumns=@JoinColumn(name=“时间表项目id”),
inverseJoinColumns=@JoinColumn(name=“group\u id”))
私有集合组;
我需要得到所有时间表项目,其中集合包含一个特定的组(集合也可以有许多不同的组。如果“我的组”是其中之一,那就是我需要的)

公共列表FindItemWithGroup(组){
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery=cb.createQuery(TimetableItem.class);
Root=query.from(TimetableItem.class);
//像那样的东西,但不起作用
谓词谓词predicateForGroup=cb.isTrue(root.get(TimetableItem_uu.GROUPS).in(group));
query.where(predicateForGroup);
List timetableItems=em.createQuery(query.getResultList();
如果我在没有任何条件的情况下运行代码,我可以在调试器中看到我的
List timetableItems
包含数据库中的所有项,并且每个项都包含
Set
,其中包含组


当然,我可以“手动”找到我需要的项目(例如使用.stream()),但我确信有某种方法可以使用谓词获得它。

使用CriteriaBuilder.isMember方法:

Predicate predicateForGroup = cb.isMember(group, root.get(TimetableItem_.GROUPS));

哇!!!真的很管用!!!!!非常感谢你,弗兰克!!!!!!!:)
Predicate predicateForGroup = cb.isMember(group, root.get(TimetableItem_.GROUPS));