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