1
我试图将此SQL查询转换为Hibernate标准,但我不太清楚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)。
该查询返回带有最新endDate的项目。我希望能够使用Hibernate查询头表并根据最新的endDate对其中一个项目(如上面的SQL查询)进行排序。
感谢您的任何帮助。