我必须将分离的JPA实体从服务器发送到客户端并且它不会回来, 但是客户端应该能够可靠地实例化这些实体。
实体具有双向关系(循环图),集合,数组和嵌入键。
我可以控制服务器和客户端 - 即我可以在客户端和服务器中使用相同版本的实体类,并且序列化数据将非常短暂。
这将用于关键操作我必须确保客户端能够无任何问题地反序列化。无风险 - 不惜任何代价。反序列化的可靠性比效率/速度/大小更重要
有关如何处理此问题的建议以及用于最低风险解决方案的库?似乎有很多选项XStream,JAXB,Java序列化,Json,XMLEncoder等......我有点困惑。
答案 0 :(得分:1)
我在使用JAXB进行JPA实体类的XML序列化方面有很好的经验。经证实,许多关于基于Web服务的客户端 - 服务器通信的关键项目。
通常,使用另一个DTO层进行实体序列化是一种很好的做法。这样,您可以减少关系中的循环,并进一步自定义对象以进行序列化。您可以手动在这些图层之间进行映射,也可以使用Dozer之类的工具。
通常它只涉及创建具有少量JAXB注释(@XmlType等)的相应POJO以及这些POJO DTO和JPA实体之间的一些映射。
答案 1 :(得分:1)
注意:我是EclipseLink JAXB (MOXy)潜在客户和JAXB (JSR-222)专家组的成员。
EclipseLink MOXy 是JAXB(JSR-222)规范的实现。由于EclipseLink还提供JPA implementation许多扩展,旨在映射JPA实体:
@XmlInverseReference
用于支持双向关系(请参阅:http://blog.bdoughan.com/2010/07/jpa-entities-to-xml-bidirectional.html)@XmlPath
用于映射嵌入式ID(请参阅:http://blog.bdoughan.com/2010/07/xpath-based-mapping.html)。@XmlJoinNodes
(类似于JPA' @JoinColumns
),当您需要按键/外键映射时。由于您的问题也标记为json,您可能有兴趣知道MOXy还使用JAXB元数据提供JSON绑定:
说到可靠性MOXy目前是WebLogic 12.1.1中的默认JAXB提供程序。