有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate查询,其中包含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,在内部约束中导航时,我很难指定这些内部联接。 我能够重新创建链接答案中的初始标准,但我似乎无法加入标准和根标准


共 (1) 个答案

  1. # 1 楼答案

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