【发布时间】:2014-02-06 16:00:13
【问题描述】:
我有一个如下所示的伪 sql 查询:
from TableA as a
join fetch TableB as b
WHERE
(a.id, a.revision) IN ( SELECT id, MAX (revision) FROM TableA GROUP BY id)
and
(b.id, b.revision) IN ( SELECT id, MAX (revision) FROM TableB GROUP BY id);
我想使用休眠条件 api 来做同样的事情。
我有一个解决方案,但它有一个弱点:
final Criteria criteria = getSession().createCriteria(TableA.class, "a");
criteria.setFetchMode("btables", FetchMode.JOIN); //$NON-NLS-1$
criteria.add(Restrictions.sqlRestriction("({alias}.id, {alias}.revision) IN ( SELECT id, MAX (revision) FROM TableA GROUP BY id)"));
Criteria bSubCriteria = criteria.createCriteria("a.btables", "b");
bSubCriteria.add(Restrictions.sqlRestriction("({alias}.id, {alias}.revision) IN ( SELECT id, MAX (revision) FROM TableB GROUP BY id)"));
我的解决方案的问题是我必须在 sql 限制中显式命名表。
有没有人有更好的方法来模拟这个,而不注入任何 sql,或者让 Hibernate 解析表的名称?
【问题讨论】:
标签: java sql hibernate criteria-api