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 のデフォルトのデータを使用します。
私は間違った方向を見ているのかもしれません。したがって、これを解決するためのアイデアは大歓迎です。
ありがとう!