如何完全填充一个 Ebean 实体?

3
我正在使用Play框架,并尝试从我的Scala代码中访问Ebean实体的属性(定义为公共字段并由Play框架增强)。 根据Play文档,我了解到: (2)直接访问Ebean字段时的增强(启用延迟加载)仅适用于Java类,而不适用于Scala。因此,从Scala源文件(包括标准Play模板)直接访问字段不会调用延迟加载,通常导致未填充的实体字段为空。为确保字段被填充,请手动创建getter/setter并调用它们,或者在访问字段之前确保实体已完全填充。 那么我该如何执行(b)呢?我可能可以在调用Scala之前从我的Java中访问属性,但是否有更好/更简单的方法呢?
1个回答

5
假设您有一个带有Address属性的Person对象。 通常,在EBean中,您会执行以下操作:
Person p = Person.find.byId(1);
然而,这时可能会出现

p.address.streetnull 的情况。

这就是为什么您可以定义明确的getter和setter,并执行类似于 p.getAddress().getStreet() 的操作。 这是第一种方法。

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

public static Person findById(Long id) {
    return Ebean.find(Person.class)
        .fetch("address")
        .where() 
        .eq("id", id)
        .findUnique();
}
我认为这是在开始使用(b)之前填充字段的一种方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,