【问题标题】:How to Write Simple Hibernate Criteria Subquery如何编写简单的 Hibernate Criteria 子查询
【发布时间】:2017-10-03 12:07:47
【问题描述】:

如何在 Java 中将此 SQL 查询编写为 Hibernate JPA 标准(带有限制等)?

SELECT q.* FROM queue AS q WHERE q.executed = false AND q.queued_on = (SELECT min(queued_on) FROM queue WHERE item_id = q.item_id);

我只设法写了这样的第一部分:

getBaseCriteria()
    .add(Restrictions.eq("executed", false))
    // Missing Second Where Filter Here
    .addOrder(Order.asc("queuedOn"))
    .list();

【问题讨论】:

    标签: java hibernate jpa criteria hibernate-criteria


    【解决方案1】:

    尝试为子查询创建一个单独的条件实例,然后简单地添加另一个限制,如下所示:

    DetachedCriteria subCriteria = DetachedCriteria.forClass(Queue.class, "sub")
        .add(Restrictions.eqProperty("sub.itemId","main.itemId"))
        .setProjection(Projections.projectionList().add(Projections.min("sub.queuedOn")));
    
    session.createCriteria(Queue.class, "main")
       .add(Subqueries.propertyEq("main.queuedOn", subCriteria ));
       .add(Restrictions.eq("main.executed", false));
       .addOrder(Order.asc("main.queuedOn"))
       .list();
    

    【讨论】:

    • session.createCriteria 在 5.2 中已弃用
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2010-12-10
    • 2013-08-20
    • 2011-09-27
    • 1970-01-01
    • 2021-02-03
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多