0

T1 と T2 の 2 つのテーブルがあり、次のようなことを達成したいと考えています。

Select * from t1 left outer join t2 on (t1.id = t2.id and t2.x = :val) where t2.x is null or t2.x = :val

T1 と T2 のエンティティがあります。

T1:

 @OneToOne(fetch = FetchType.LAZY)
 @JoinColumn(name = "ID", insertable = false, updatable = false)
 protected T2 t2;

次のJPAクエリを試しました:

SELECT t1 FROM T1 LEFT JOIN t.t1 t2 WHERE t2.x IS NULL OR t2.x = :val

しかし、それは私が望むものを私に与えません。問題は、特定の ID に対して T2 に一致するレコードがある場合、1 つの T2.X 値に対してのみ結果を受け取ることです。nullであっても、すべての値の結果が必要です。

生成された SQL は次のようになります。

SELECT * FROM T1 t1 LEFT OUTER JOIN T2 t2 ON (t2.ID = t1.ID) WHERE ((t2.X IS NULL) OR (t2.X = ?))

なぜこれが必要なのですか?T1 にいくつかの詳細情報があり、T2 でも同じ情報が利用できる可能性があります。T2 の情報は優先されます。T2 でデータが利用できない場合は、T1 のデフォルトのデータを使用します。

私は間違った方向を見ているのかもしれません。したがって、これを解決するためのアイデアは大歓迎です。

ありがとう!

4

1 に答える 1

0

EclipseLink は 2.4 で ON 句のサポートを追加しました。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON

于 2012-06-13T14:17:50.673 に答える