gpt4 book ai didi

java - Ebean - 并非所有记录都被返回

转载 作者:行者123 更新时间:2023-11-29 08:58:48 25 4
gpt4 key购买 nike

我对 Ebean 的世界是全新的Play Framework 2 中使用的 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

在我看来,使用 inner join 而不是 left join。这是什么原因?

最佳答案

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

关于java - Ebean - 并非所有记录都被返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18724438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com