Hibernate query with subquery in WHERE clause and multiple joins
我一直试图让Hibernate在其where子句中为我生成一个带有子查询的查询。我已经以这个答案为基础来帮助我前进,但是这个问题只提到了一张桌子。
但是,这是我需要的(在SQL中):
1 2 3 4 5 6 7 | 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结合在一起。
如果使用
以下代码似乎可以正常工作,以添加我要查找的WHERE子句。
1 2 3 4 5 6 7 | 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"))); |