1

我必须将分离的 JPA 实体从服务器发送到客户端并且它不会返回,但是客户端应该能够可靠地实例化这些实体。

  1. 实体中有双向关系(循环图)、集合、数组和可嵌入的键。

  2. 我可以控制服务器和客户端——即我可以在客户端和服务器中使用相同版本的实体类,并且序列化的数据将非常短暂。

  3. 这将用于关键操作,我必须确保客户端能够毫无问题地反序列化。无风险——不惜一切代价。反序列化的可靠性比效率/速度/尺寸更重要

关于如何解决这个问题以及使用什么库来实现最低风险解决方案的任何建议?XStream、JAXB、Java 序列化、Json、XMLEncoder 等选项似乎有很多……我有点困惑。

4

2 回答 2

1

我有使用 JAXB 对 JPA 实体类进行 XML 序列化的良好经验。在基于 Web 服务的客户端-服务器通信的许多关键项目中得到证明。

通常,使用另一个 DTO 层进行实体序列化是一种很好的做法。通过这种方式,您可以缩短关系周期并进一步自定义您的对象以进行序列化。您可以手动在这些层之间进行映射,或者使用诸如Dozer 之类的工具。

通常它只涉及创建具有少量 JAXB 注释(@XmlType 等)的相应 POJO,以及这些 POJO DTO 和 JPA 实体之间的一些映射。

于 2013-03-03T14:14:00.520 回答
1

注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。

EclipseLink MOXy是 JAXB (JSR-222) 规范的实现。由于 EclipseLink 还提供了JPA 实现,它的许多扩展都旨在映射 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)当您需要按键/外键进行映射时。

由于您的问题也被标记为您可能有兴趣知道 MOXy 还使用 JAXB 元数据提供 JSON 绑定:

谈到可靠性 MOXy 目前是 WebLogic 12.1.1 中的默认 JAXB 提供程序。

于 2013-03-04T16:59:34.860 回答