2

要从数据库中选择概览,我必须使用如下语句:

select a1.begin, a1.end, b1.name, c1.name, d1.name, e1.name, f1.name, ...
from a2, b1, b2, c1, c2, a1
left outer join (d1 join d2 on d2.id = d1.parent and d1.user = ?) on
     d1.deleted = 0 and d1.parent = a1.d1_id
left outer join (e1 join e2 on e2.id = e1.parent and e1.user = ?) on
     e1.deleted = 0 and e1.parent = a1.e1_id
left outer join (f1 join f2 on f2.id = f1.parent and f1.user = ?) on
     f1.deleted = 0 and f1.parent = a1.f1_id
where ....  a lot more stuff...

该语句的作用就像一个魅力,数据库可以快速处理它。相信我,绝对没有其他方法可以获取所需的数据。

直到现在我还很自豪地说,在我们的 java 项目中,我没有一个纯 EJB-QL 甚至 SQL 的词。但是现在我不确定是否有任何方法可以通过使用 CriteriaBuilder 来构建这样的语句。我完全不知道如何创建具有多个条件甚至嵌套内部联接的外部联接。

任何提示都非常感谢。

谢谢亨内斯

4

2 回答 2

0

首次加入:

criteria=session.createCriteria(mappingClass.class).createAlias("propertyName","firstAliasName");

第二次加入:

criteria.createAlias("firstAliasName.propertyName","secondAliasName");

等等。

如果您通过映射关系加入,那将执行 OFC。如果不是阅读以下内容:Criteria API 。这样做的最简单方法是通过 HPQL 或 JPQL,但是您可能不会得到映射的实体,只有带有列的 ResultSet(但我认为无论如何你都不会得到它)

于 2013-10-24T10:00:21.323 回答
0

在不了解对象模型的情况下很难给出具体的帮助,但我相信你想使用join方法并指定join类型。使用它,您可以嵌套连接,这些连接将使用在指定属性映射上定义的关系。可以在此处找到标准 API 的解释操作: http ://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria#Join

Eclipselink 还支持 JPQL 中的“on”子句和通过功能https://bugs.eclipse.org/bugs/show_bug.cgi?id=367452进行的条件查询

于 2013-10-24T11:27:11.473 回答