休眠查询,在 WHERE 子句和多个连接中使用子查询



我一直在尝试让Hibernate为我生成一个在其where子句中带有子查询的查询。我用这个答案作为基础来帮助我前进,但这个问题只提到了一张桌子。

但是,这就是我需要的(在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。

如果实体与@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")));

最新更新