【问题标题】:JPA Criteria select all instances with max values in their groupsJPA Criteria 选择其组中具有最大值的所有实例
【发布时间】:2013-01-02 06:12:01
【问题描述】:

有没有办法用 JPA 2 CriteriaBuilder 编写相当于以下查询的方法?

select * from season s1
where end = (
    select max(end)
    from season s2
    where s1.contest_id=s2.contest_id
);

在 JPQL 中,这个查询是:

Select s1 from Season s1 
where s1.end = (
    select max(s2.end)
    from Season s2
    where s1.contest=s2.contest
)

【问题讨论】:

    标签: jpa jpa-2.0 criteria-api correlated-subquery


    【解决方案1】:

    这应该可以工作,contest 要么是一个基本的 Integer 属性,要么是一个指向另一个非基本实体的 ManyToOne 属性。

    EntityManger em;      //to be injected or constructed
    
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Season> cq = cb.createQuery(Season.class);
    Subquery<Date> sq = cq.subquery(Date.class);
    Root<Season> s1 = cq.from(Season.class);
    Root<Season> s2 = sq.from(Season.class);
    sq.select(cb.greatest(s2.get(Season_.end)));
    sq.where(cb.equal(s2.get(Season_.contest), s1.get(Season_.contest)));
    cq.where(cb.equal(s1.get(Season_.end), sq));
    List<Season> result = em.createQuery(cq).getResultList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多