0

我有 2 个具有 @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;
}

我将始终Player从 a访问 aUser并且我希望当我加载用户时,他的 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

4

2 回答 2

2

编辑:此答案仅适用于带有 Ebean 的 Play 2.0。

目前尚不清楚您使用的是 Ebean 还是纯 JPA。

如果它是 Ebean,如doc中所述,您必须获取链接实体:

List<User> orders =   
    Ebean.find(User.class)  
        .fetch("player")  
        .findList();  
于 2012-10-20T12:31:31.250 回答
2

在 User 类中,正如您在评论中注意到 player 可以为 null

public static void findByIdWithPlayer(Long id) {
    find("select distinct user from User user left join fetch user.player where user.id=?", id).first();
}
于 2012-10-22T05:35:07.983 回答