OneToOne
単一方向またはManyToOne
0..1 関係に関係を利用しようとすると、OPENJPA は LEFT JOIN ではなく INNER JOIN を生成します。
@OneToOne(optional=true, fetch= FetchType.LAZY)
@JoinTable(name="linkThisResult",
joinColumns= {
@JoinColumn(insertable=false, updatable=false, unique=true, nullable=false, name="thisid",referencedColumnName="thisid")
},
inverseJoinColumns= {
@JoinColumn(insertable=false, updatable=false, nullable=false, name="resultid", referencedColumnName="resultid")
}
)
private ResultEntity resultEntity;
の与えられたテーブル:
result: { resultId, ... }
this : { thisId, ... }
linkThisResult: { linkThisResultId, resultId, thisId, ... }
オプションの挿入可能/更新可能/ヌル可能フラグは、生成されたSQLに影響を与えないようです。これは OPENJPA 2.2.0 を利用しています。JoinTable のない直接の JoinColumns の場合、optional は結合タイプを変更します。
問題は、LEFT JOIN と同等のものを実行する必要があることを OPENJPA に示す方法です (理想的には遅延ですが、厳密な要件ではありません)。