【问题标题】:Ebean - Not all records are returnedEbean - 并非所有记录都返回
【发布时间】:2013-09-10 16:36:35
【问题描述】:

我对 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:

User.find.findRowCount();

是:

select count(*) from user t0

执行的 SQL:

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

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

【问题讨论】:

  • 不确定问题出在哪里,但如果您在这里拥有的正是您在项目中拥有的,那么您的 UserAccount 类似乎不正确。尝试在您的 UserAccount 类中将 User.class 更改为 UserAccount.class。
  • 这只是我写问题时犯的错误。无论如何,感谢您指出这一点(我编辑了问题)。

标签: java orm playframework playframework-2.1 ebean


【解决方案1】:

在您的 User 类中,您使用 ma​​ppedBy = "user" 作为列名,尽管在 UserAccount 类中您使用 name = “用户 ID”

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 2021-11-15
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多