@OneToOne 関係を持つ 2 つのモデルがあります。User
モデルとモデルとしましょうPlayer
。各ユーザーはプレーヤーであり、各プレーヤーはユーザーです。
これら 2 つのモデルのコードは次のとおりです。
@Entity
public class User extends Model {
@Required
public String name;
@OneToOne(fetch = FetchType.EAGER)
public Player player;
}
@Entity
public class Player extends Model {
@Required
public String nickname;
@Required
public Gender gender;
}
私は常に aPlayer
から aUser
にアクセスし、User をロードするときに彼の Player もロードされるようにしたい (それが を使用した理由ですfetch = FetchType.EAGER
)。
したがって、(最適化の目的で) をロードするUser
と、クエリはPlayer
. 何かのようなもの :
select u, p from User u join u.player p where u.player_id = p.id
しかし、クエリ数とクエリのデバッグ出力を見ると、2 つのクエリが実行されていることがわかります。何かのようなもの:
select u from User u
select p from Player p where p.id = ?
しかし、これは最適化されていません。どうすればJPAに結合リクエストを実行させて、自分User
とそのを取得させることができPlayer
ますか?
あなたの助けのためにタンク!
編集:私はPlayフレームワーク1.2.5を使用しています