使用Play Framework和Ebean进行复杂连接

时间:2012-05-29 03:51:33

标签: java sql playframework-2.0 ebean

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

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

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

我试图找到自己并且不能,只有这样我才能想到它是使用直接sql与准备好的语句,我宁愿不这样做。

1 个答案:

答案 0 :(得分:16)

ellou'kalvish

模型之间的

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会获取所有对象的属性和关系,因此您无需创建子查询。当然,您甚至可以选择/获取当前所需的数据。

official Ebean documentation page您会找到相当不错的参考指南(pdf),有关关系的一般说明,请参阅11.6.2 Relationships部分。

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