从数据库中选择概述我必须使用如下语句:
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来构建这样的语句。我完全不知道如何使用多个单一条件或甚至嵌套的内部联接创建外部联接。
任何提示都非常赞赏。
由于 亨尼斯
答案 0 :(得分:0)
首次加入:
criteria=session.createCriteria(mappingClass.class).createAlias("propertyName","firstAliasName");
第二次加入:
criteria.createAlias("firstAliasName.propertyName","secondAliasName");
等等。
如果您通过映射关系加入,那将会进行OFC。如果不是这样:Criteria API 。最简单的方法是通过HPQL或JPQL来考虑它,但是你可能不会得到映射的enities作为结果,只有ResultSet有列(但我认为你无论如何都不会得到它)
答案 1 :(得分:0)
在不知道对象模型的情况下很难提供特定帮助,但我相信你想使用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
的条件查询