Ebean - 并非返回所有记录

时间:2013-09-10 16:36:36

标签: java orm playframework playframework-2.1 ebean

我在Play Framework 2中使用的Ebean ORM持久层世界中是全新的。我的初步印象非常好,但在我的爱好项目中,我偶然发现了我不知道如何解决的问题。我不确定是否有什么我做错了(模特?)或者可能只是缺乏我对Ebean的了解。

我有两个模型:UserUserAccount

  • User可能拥有也可能没有帐户。
  • UserAccount始终指向一个User

所以有User型号:

@Entity
public class User extends Model {

    @Id
    private Long id;

    @NotNull
    private String name;

    @NotNull
    private String surname;

    @OneToOne(cascade=CascadeType.ALL, mappedBy = "user")
    private UserAccount userAccount;

    public static Finder<Long, User> find = new Finder<>(
        Long.class, User.class
    );

    // ... Getters and Setters ...
}

并且有UserAccount型号:

@Entity
public class UserAccount extends Model {

    @Id
    private Long id;

    @NotNull
    private String username;

    @NotNull
    private String password;

    @NotNull
    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;

    public static Finder<Long, UserAccount> find = new Finder<>(
        Long.class, UserAccount.class
    );

    // ... Getters and Setters ...
}

我想要做的是使用和不使用帐户来获取所有用户。

我确信这段代码可以完成这项工作:

User.find.all();

...但令我惊讶的是,只返回了具有关联帐户记录的用户。

另一件有趣的事是这个电话:

User.find.findRowCount();

...返回了有和没有帐户的实际用户数,所以它的工作方式就像我期望这两个查询一样。

那我在那里错过了什么?我的模特有什么问题吗?为什么不归还所有用户?

[编辑]

我附上了更多信息。


执行SQL for:

User.find.findRowCount();

是:

select count(*) from user t0

执行SQL for:

User.find.all();

select t0.id c0, t0.name c1, t0.surname c2, t1.id c3 from user t0 join user_account t1 on t1.user_id = t0.id

在我看来,使用内连接而不是左连接。这是什么原因?

1 个答案:

答案 0 :(得分:0)

在您的用户课程中,您使用 mappedBy =“user”作为列名,但在 UserAccount 类中,您使用 name = “USER_ID”即可。