我有一个实体,其中一个字段是
@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();
如果在没有任何条件的情况下运行代码,我可以在调试器中看到我的列表
包含数据库中的所有项,并且每个项都包含集
中的组。
截图
当然,我可以“手动”找到我需要的项(例如,使用.stream()),但我肯定有一些方法可以使用谓词来获得它。
使用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筛选,不起作用 表代码: 这是我的领域 这是我的会员。数据
如何返回特定日期所在的行号? 类似这样的事情: