JAVAew@OneToOne与不使用联接的播放框架的关系
我有两个有@OneToOne关系的模型。让我们假设一个模型User
和一个模型Player
。每个用户都是玩家,每个玩家都是用户
以下是这两种型号的代码:
@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;
}
我将始终从User
访问Player
,我希望当我加载一个用户时,他的播放器也被加载(这就是为什么我使用fetch = FetchType.EAGER
)
因此,我希望(出于优化目的)当我加载User
时,查询是一个连接查询,它也会加载Player
。
比如:
select u, p from User u join u.player p where u.player_id = p.id
但是当我查看查询计数和查询调试输出时,我可以看到执行了两个查询。 比如:
select u from User u
select p from Player p where p.id = ?
但这并没有得到优化,如何让JPA执行连接请求来获取我的User
及其Player
谢谢你的帮助
编辑:我正在使用Play framework 1.2.5
# 1 楼答案
编辑:此答案仅适用于带有Ebean的Play 2.0
不清楚您使用的是Ebean还是普通JPA
如果它是Ebean,如doc中所述,则必须获取链接的实体:
# 2 楼答案
在User类中,正如您在注释中注意到的,player可以为null