要从集合属性匹配的Hibernate Restriction条件

时间:2017-10-10 03:44:52

标签: java hibernate hibernate-criteria

我有一个使用hibernate的@ElementCollection字段的实体,例如:

@ElementCollection(fetch = FetchType.EAGER)
@Column(name="years")
private Set<Integer> years = new HashSet<>();

其中年份是一组年份,我只想过滤那些年份中包含特定queryYear的记录。

我可以在Hibernate中使用哪种限制条件作为Restriction.in不起作用反之亦然

1 个答案:

答案 0 :(得分:0)

您无法在一个条件中执行此操作,因为如果不使用某些语法(如HAVING)或使用多个连接或其他棘手的解决方法,也无法在一个普通查询中执行此操作。

最接近的标准是使用Restrictions.in然后使用agregate来计算行号,如下所示:

c.add(Restrictions.in("years", years));
c.setProjection(Projections.projectionList()
    .add(Projections.groupProperty("id"))
    .add(Projections.count("id")));

所有具有count = years.size的结果都是您想要的ID。