2

我正在使用 Play 开发应用程序!框架 2.1.3,使用 EBean 作为模型层我希望能够执行部分对象查询,并且当我序列化为 JSON 以准备将结果发送回用户时,不会按需延迟加载未选择的属性。

我尝试将 AutoFetch 设置为 false,我还尝试在序列化为 JSON 之前结束事务(我最终得到一个 Transaction is Inactive 错误)我还在@Lazy(false)我的模型类上添加了注释。

同样,我也有一个一对多关联,我想查询它的前 3 行,我使用了new FetchConfig().queryFirst(2)但我想由于同样的延迟加载问题,我最终得到了整个相关的关联行。

看着手册,我读到了这个(EBean Partial Objects):

当您获取或设置它没有的属性时,部分对象将按需延迟加载其余数据。

有没有办法解决这个问题,我尝试的任何方法似乎都不起作用!

4

2 回答 2

1

你有 2 个选择。

选项 1)使用 Ebean 的内置 JSON 支持,该支持在底层使用 Jackson 核心。Ebean 的 JsonContext 提供了许多编写器选项。

使用适用于查询和 JSON 的 PathProperties 的示例。

PathProperties pathProperties =
        PathProperties.parse("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))");

List<Customer> customers = Ebean.find(Customer.class)
    .apply(pathProperties)
    .findList();

String jsonString = Ebean.json().toJson(customers, pathProperties);

选项 2)是版本 6.2.2 上的一项新功能,您可以在其中对查询设置 DisableLazyLoading(true)。

参考:https ://github.com/ebean-orm/avaje-ebeanorm/issues/360

于 2015-07-29T23:50:11.137 回答
0

我已经通过使用标准 JDBC 接口解决了这个问题,并在不需要延迟加载的查询上使用Statements和处理。ResultSets

附带说明一下,在 Scala 的情况下,直接字段访问不使用延迟加载,但不幸的是它不是我用于我的应用程序的语言。

于 2013-08-25T06:54:51.117 回答