如何完全填充Ebean实体?

Pat*_*Huy 2 java scala ebean playframework-2.0

我正在使用Play框架,我正在尝试从我的scala代码访问Ebean实体的属性(定义为公共字段并由Play框架增强).

从游戏文档中我了解到了这一点

(2)直接Ebean字段访问(启用延迟加载)的增强仅适用于Java类,而不适用于Scala.因此,Scala源文件(包括标准Play模板)的直接字段访问不会调用延迟加载,通常会导致空(未填充)实体字段.要确保填充字段,可以(a)手动创建getter/setter并改为调用它们,或者(b)确保在访问字段之前完全填充实体.

那我该如何做(b)?我可以在调用scala之前从我的Java访问属性但是有更好/更简单的方法吗?

Ant*_*ton 5

假设你有Person一个带Address属性的对象.

通常,在EBean中,您可以执行以下操作:

Person p = Person.find.byId(1);
Run Code Online (Sandbox Code Playgroud)

但是,那么它可能会发生,那p.address.streetnull.这就是为什么你可以定义明确的getter和setter并做类似的事情p.getAddress().getStreet().这是(a)部分.

但是还有另一种方法可以使这个工作.您可以在类中定义一个方法来检索对象,但也可以获取引用的方法.

public static Person findById(Long id) {
    return Ebean.find(Person.class)
        .fetch("address")
        .where() 
        .eq("id", id)
        .findUnique();
}
Run Code Online (Sandbox Code Playgroud)

我相信这是一种在开始使用之前填充该领域的方法(b).