我正在使用PlayFramework,我真的很喜欢它。当我想从表中获取数据时,例如我有一个user
表,我使用以下语法:
List<User> users = User.find.where().eq("email", email).findList();
我的问题是,当我获得用户对象时,我有一个id
列。使用id
值,我可以映射到其他表,并且这些表的id
可以映射到更多表,因此跨多个表连接的基本概念。是否有任何示例或地方我可以阅读它描述如何使用上述语法实现它?
我试图找到自己并且不能,只有这样我才能想到它是使用直接sql与准备好的语句,我宁愿不这样做。
答案 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()
来获取“部分”对象