我正在用Play开发一个应用程序!Framework2.1.3,使用EBean作为模型层,我希望能够执行部分对象查询,而不是在我序列化到JSON准备将结果发送回用户时按需加载未选择的属性。
我尝试将AutoFetch设置为false,还尝试在序列化到JSON之前结束事务(最后得到一个事务是非活动错误),我还在模型类中添加了注释@Lazy(false)
。
同样,我也有一个一对多的关联,我想查询它的前3行,我使用了new FetchConfig().queryFirst(2)
,但是我猜由于同样的延迟加载问题,我最终得到了所有相关的关联行。
看看手册,我读了这个(EBean部分对象):
当您获得或设置一个不具有的属性时,部分对象将根据需要延迟加载其余的数据。
有什么办法可以绕过这件事吗?我尝试过的一切似乎都没有用!
发布于 2013-08-24 22:54:51
我通过使用标准的JDBC接口(使用Statements
和ResultSets
)来解决这个问题,而这些查询是我不需要延迟加载的。
顺便指出的是,在Scala的情况下,直接字段访问并不使用延迟加载,但不幸的是,它不是我在应用程序中使用的语言。
发布于 2015-07-29 15:50:11
你有两个选择。
选项1)使用Ebean内置的JSON支持,该支持在幕后使用杰克逊核心。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版本中的一个新特性,您可以在其中对查询进行setDisableLazyLoading(true)。
https://stackoverflow.com/questions/18250976
复制