java - Flex Blaze DS 和 JPA - 延迟加载问题

标签 java apache-flex reflection jpa blazeds

我正在 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/

相关文章:

java - ToStringBuilder.reflectionToString(Object) 以什么格式显示日期?

java 8u31 插件导致签名的小程序加载速度慢得多

java - FTPClient下载文件失败,retrieveFile()方法replyCode=550

apache-flex - Flex 3,从服务器加载时无法将SystemManager转换为SystemManager吗?

java - 如何获取间接实现的泛型接口(interface)的实际类型参数?

java - 根据输入执行 "pipeline"个用户定义操作的设计

java - 服务器返回 Http 响应代码 : 707

java - 为什么抽象类可以强制重写具体方法?

apache-flex - 您为 Flex 应用程序设计外观的工作流程是什么?

apache-flex - 如何在 Flex 4 TextInput 组件上设置角半径