Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Join JPQL联接表将列名加倍_Join_Double_Eclipselink_Jpql_Criteria Api - Fatal编程技术网

Join JPQL联接表将列名加倍

Join JPQL联接表将列名加倍,join,double,eclipselink,jpql,criteria-api,Join,Double,Eclipselink,Jpql,Criteria Api,我在一个连接中有多个表,每个表都有一个列ID。因此在resultig连接中有很多ID列。如何使用criteria API访问特定ID列 ParameterExpression<A> idParam = criteriaBuilder.parameter(A.class, PARAM_NAME); Subquery<B> sq = query.subquery(B.class); Root<B> root = sq.from(B.class); Join<

我在一个连接中有多个表,每个表都有一个列ID。因此在resultig连接中有很多ID列。如何使用criteria API访问特定ID列

ParameterExpression<A> idParam = criteriaBuilder.parameter(A.class, PARAM_NAME);
Subquery<B> sq = query.subquery(B.class);
Root<B> root = sq.from(B.class);
Join<C, D> joinTogether = root.join("memberX").join("memberY");
sq.select(root);
sq.where(criteriaBuilder.and(criteriaBuilder.equal(joinTogether.get("id"), idParam), criteriaBuilder.equal(parentQuery.get("id"), root.get("id"))));
表E t6是表B和C之间的附加联接表,t0是对父查询的引用。相反,t3.id=:paramName EclipseLink在第一个等号paramName是常量PARAM_NAME的内容之前不创建任何内容。我的想法是,id列可以引用所有表,而EclipseLink无法决定我指的是哪个表

我怎样才能改变这一点

多谢各位
安德烈

我不确定我是否理解这个问题。EclipseLink是否生成无效的SQL查询?我不知道它是EclipseLink还是我的代码。EclipseLink创建SQL语句,但它包含错误的equals部分。我想,我必须修改我的代码,但我不知道如何修改。同时,我使用了元模型,并将jointhowe.getid更改为jointhowe.getD_u2;d.id,但它不会更改生成的SQL。如果Eclipselink正在生成该SQL,我想您可能发现了一个错误。我猜生成的查询缺少某些内容,因为它是一个子查询。请尝试打印最终查询。
SELECT 1 FROM E t6, B t5, C t4, D t3 WHERE ((( = paramName) AND (t0.ID = t5.ID)) AND (((t6.memberZ = t5.ID) AND (t4.ID = t6.memberX)) AND (t3.ID = t4.memberY))))