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