我正在 Flex 中开发一个应用程序,使用 Blaze DS 与 Java 后端通信,该后端通过 JPA (Eclipse Link) 提供持久性。
我在通过 Blaze DS 将 JPA 实体传递到 Flex 时遇到问题。 Blaze DS 使用反射通过调用实体上的所有 getter 方法将 JPA 实体转换为 ObjectProxy(实际上是 HashMap)。这包括任何延迟初始化的一对多关系。
你大概可以明白我要去哪里了。如果我通过 JPA 传递单个对象,这将调用该对象上的所有一对多方法。对于每个返回的对象,如果它们具有一对多关系,它们也将被调用。因此,通过传回单个 JPA 实体,我实际上最终执行了多个数据库调用并将所有相关条目作为单个 ObjectProxy 实例传回!
迄今为止,我的解决方案是创建一个转换器,将每个实体转换为 ObjectProxy,反之亦然。这显然很麻烦,必须有更好的方法。
请问有什么想法吗?
最佳答案
作为替代方案,您可以考虑使用 GraniteDS而不是 BlazeDS:GraniteDS 具有更强大的 data management堆栈比 BlazeDS(它与 LCDS 竞争更多)并且完全支持所有主要 JPA 引擎的延迟加载:Hibernate、EclipseLink、OpenJPA 等。
此外,GraniteDS 有一个很棒的客户端 transparent lazy loading功能甚至是所谓的reverse lazy-loading机制。
而且您不需要任何类型的中间 DTO:它按原样序列化 JPA 实体,并在客户端使用代码生成的 ActionScript bean 来保持其初始化状态。
关于java - Flex Blaze DS 和 JPA - 延迟加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10141115/