Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用CriteriaBuilder设置此SQL查询?_Java_Sql_Jakarta Ee_Eclipselink_Left Join - Fatal编程技术网

Java 如何使用CriteriaBuilder设置此SQL查询?

Java 如何使用CriteriaBuilder设置此SQL查询?,java,sql,jakarta-ee,eclipselink,left-join,Java,Sql,Jakarta Ee,Eclipselink,Left Join,要从数据库中选择概述,我必须使用如下语句: 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 j

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

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来构建这样的语句。我完全不知道如何创建具有多个条件的外部联接,甚至不知道如何使用嵌套的内部联接

非常感谢您的任何提示

谢谢 Hennes第一次加入:

criteria=session.createCriteria(mappingClass.class).createAlias("propertyName","firstAliasName");
第二次加入:

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

如果您是通过映射关系加入的,则这将执行OFC。如果没有,请阅读以下内容:
. 最简单的方法是通过HPQL或JPQL,但是您可能不会得到映射的enities作为结果,只会得到带有列的ResultSet(但我认为您无论如何也不会得到它)

在不了解对象模型的情况下,很难给出具体的帮助,但我相信您希望使用join方法并指定join类型。使用它,可以嵌套将使用指定属性映射上定义的关系的联接。解释标准API的作用可在此处找到:


Eclipselink还支持JPQL中的“on”子句,并通过feature进行条件查询

Hi,第一次没有看到on方法。很好,非常感谢。