1

OneToOne単一方向またはManyToOne0..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 に示す方法です (理想的には遅延ですが、厳密な要件ではありません)。

4

0 に答える 0