7

我正在使用 PlayFramework,我真的很喜欢它。当我想从表中获取数据时,例如我有一个user表,我使用以下语法:

List<User> users = User.find.where().eq("email", email).findList();

我的问题是,当我得到用户对象时,我有一id列。使用该id值,我可以映射到其他表,并且id这些表的 's 可以映射到更多表,因此连接多个表的基本概念。有没有我可以阅读的示例或地方,其中描述了如何使用上述语法实现它?

我试图找到自己并且做不到,此时我能想到的唯一方法是将直接 sql 与准备好的语句一起使用,而我不想这样做。

4

1 回答 1

16

你好卡尔维什

Relationships模型之间使用常见的 JPA 注释设置,如@OneToMany, @ManyToOne,@OneToOne等。

因此,如果您有User.java用户表Question.java的模型和用户问题的模型,您可以将它们加入@OneToMany(一个User有很多Question

用户

@Entity
public class User extends Model {
    @Id
    public Long id;

    public String email;

    @OneToMany
    public List<Question> questions;
}

问题

@Entity
public class Question extends Model {
    @Id
    public Long id;

    public String question;
}

当您在控制器中选择用户时,Ebean 将默认执行“加入”并获取所有用户的问题:

User user = User.find.where().eq("email", email).findUnique();
List<Question> usersQuestion = user.questions;

默认情况下,Ebean 会获取所有对象的属性和关系,因此您不需要创建子查询。当然,您可以甚至应该只选择/获取当前所需的数据。

官方 Ebean 文档页面上,您会找到相当不错的参考指南 (pdf),关系的一般描述可在部分中找到11.6.2 Relationships

在部分4.1.2 Query中有一个示例(第二个),它演示了如何使用select()and获取“部分”对象fetch()

于 2012-05-29T07:01:22.547 回答