[英]Sorting by subquery result using Hibernate Criteria
我正在尝试将此 SQL 查询转换为 Hibernate Criteria,但我不太确定如何,因为我对 Hibernate 非常陌生。
SELECT header.*,
(SELECT items.end_date from
subTable sub,
ItemTable items
WHERE items.sub_id = sub.sub_id
and header.header_id = sub.header_id
order by items.end_date desc
limit 1) as latestEndDate
from headerTable header
order by latestEndDate desc;
我可以创建子查询,但我不知道如何将它合并到主查询中。
Long headerId = getHeaderId();
Criteria criteria = session.createCriteria(dataaccess.model.Item.class, "item");
DetachedCriteria headerSubQuery =
DetachedCriteria.forClass(dataaccess.model.Header.class, "header")
.setProjection(Property.forName("header.headerId"))
.add(Restrictions.eq("headerId, headerId));
DetachedCriteria subTableQuery =
DetachedCriteria.forClass(dataaccess.model.SubTable.class, "sub")
.setProjection(Property.forName("sub.subId)).add(
Property.forName("header").in(headerSubQuery));
criteria.add(Property.forName("sub").in(subTableQuery));
criteria.addOrder(Order.desc("endDate"));
criteria.setMaxResults(1);
List<Items> items = criteria.list();
*HeaderTable 和 SubTable 具有 1:1 的关系,并且仅出于遗留原因而存在。 SubTable拥有Items,但是由于1:1的关系,HeaderTable也拥有Items(HeaderTable -> SubTable -> Items)。
该查询返回具有最新结束日期的项目。 我希望能够使用 Hibernate 查询标题表并按最新的 endDate 对其项目之一(如上面的 SQL 查询中所示)进行排序。
谢谢你的帮助。
我最终通过向我的 Header 模型添加另一个字段并使用 @Formula 注释传递我的 SQL 查询来解决这个问题。
@Formula("(SELECT items.end_date from "
+ "subTable sub, "
+ "ItemTable items "
+ "WHERE items.sub_id = sub.sub_id "
+ "and header.header_id = sub.header_id "
+ "order by items.end_date desc "
+ "limit 1)")
private Date latestStartDate;
public getLatestStartDate() {
return latestStartDate;
}
这使我可以将订单附加到我的标准中:
criteria.addOrder(Order.desc("latestStartDate"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.