1

我在连接中有多个表,每个表都有一个列 ID。所以在结果连接中有很多 ID 列。如何使用条件 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"))));

问题是,在生成的 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))))

表 E (t6) 是表 B 和 C 之间的附加连接表,t0 是对父查询的引用。相反, t3.id = :paramName EclipseLink 在第一个等号之前不创建任何内容(paramName 是常量 PARAM_NAME 的内容)。我的想法是,“id”列可以引用所有表,而 EclipseLink 无法决定我的意思是哪个表。

我怎么能改变呢?

谢谢安德烈

4

0 回答 0