首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Criteria Builder获取每个人的最新记录

使用Criteria Builder获取每个人的最新记录
EN

Stack Overflow用户
提问于 2014-03-25 13:51:18
回答 1查看 1.3K关注 0票数 1

我想知道如何使用Criteria Query生成此查询,我可以使用JPQL来实现,但需要使用JPA Criteria Query。查询为:

代码语言:javascript
复制
    select user_id, user_name,  borrowing_date
    from books_record b 
    where (user_id, borrowing_time) in (
    select br.user_id, max(br.borrowing_time)
       from books_record br
       group by br.user_id
    )
EN

回答 1

Stack Overflow用户

发布于 2014-03-25 15:15:24

下面的标准应该是有效的,我还没有测试它

代码语言:javascript
复制
//sub query
DetachedCriteria subquery = DetachedCriteria.forClass(BooksRecord.class, "bk1");
ProjectionList proj1 = Projections.projectionList();
proj1.add((Projections.property("user_id").as("user_id"));
proj1.add(Projections.max("borrowing_time").as("borrowing_time"));
proj1.add(Projections.groupProperty("user_id"));
subquery.setProjection(proj1);

//main query
Criteria mainQueryCriteria = getSession().createCriteria(BooksRecord.class, "bk2");
mainQueryCriteria.add(Restrictions.eqProperty("bk2.user_id", "bk1.user_id"));
mainQueryCriteria.add(Restrictions.eqProperty("bk2.borrowing_time", "bk1.borrowing_time"));
ProjectionList proj2 = Projections.projectionList();
proj2.add((Projections.property("user_id").as("user_id"));
proj2.add(Projections.property("user_name").as("user_name"));
proj2.add(Projections.property("borrowing_date").as("borrowing_date"));
mainQueryCriteria.setProjection(proj2);
mainQueryCriteria.setResultTransformer(Transformers.aliasToBean(BooksRecord.class));

List<BooksRecord> records = mainQueryCriteria.list();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22626426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档