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访问属性但是有更好/更简单的方法吗?
假设你有Person一个带Address属性的对象.
通常,在EBean中,您可以执行以下操作:
Person p = Person.find.byId(1);
Run Code Online (Sandbox Code Playgroud)
但是,那么它可能会发生,那p.address.street是null.这就是为什么你可以定义明确的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).