我一直在尝试让Hibernate在其where子句中使用子查询生成一个查询。我used this answer as a base to help me going,但这个问题只提到了一个表格。
然而,这是我需要的(在SQL中):
SELECT [...]
FROM a
LEFT OUTER JOIN b on a.idb = b.idb
LEFT OUTER JOIN c on b.idc = c.idc
[...]
LEFT OUTER JOIN k out on j.idk = k.idk
WHERE k.date = (SELECT max(date) from k in where in.idk = out.idk) OR k.date is null
由于我不习惯使用Hibernate,因此在导入内部约束时我无法指定这些内连接。 我能够在链接的答案中重新创建初始条件,但我似乎无法加入条件和rootCriteria。
答案 0 :(得分:0)
如果实体与@ManyToOne
注释正确连接,只需将标准加入上一个表就足以将标准传播到整个查询。
以下代码似乎可以正常添加我正在寻找的WHERE子句。
DetachedCriteria kSubquery = DetachedCriteria.forClass(TableJPE.class,"j2");
kSubQuery = kSubQuery.createAlias("k","k2");
kSubQuery.setProjection(Projections.max("k2.date"));
kSubQuery = kSubQuery.add(Restrictions.eqProperty("j.id", "j2.id"));
rootCriteria.add(Restrictions.disjunction()
.add(Subqueries.propertyEq("k.date",kSubQuery))
.add(Restrictions.isNull("k.date")));