我必须设计一个数据模型(在Java EE 6应用程序中),它将通过JPA持久地持久化,并且还需要通过JAXB进行序列化。我最后一次这样做,我有一组与JAXB注释的实体类,另一组使用JPA注释。这意味着我必须有很多用于在两者之间翻译的样板代码。我正在考虑结合它们,这样每个班级都会有两种类型的注释。我知道这个 can 完成,但我的问题是,应该它是?会导致任何问题吗?

有帮助吗?

解决方案

这个问题对我来说有点太宽了。但我确实使用 jackson 在JAXB下使用JPA实体,您可能会发现有趣的JPA实体。

在我的情况下,我有一个JPA模型,具有大约三十名实体和许多循环引用。实体之间的关系图也几乎强烈连接。换句话说,通过跟随实体关系,可以从中的任何其他实体导航到几乎任何实体。在我的情况下,使用如上所述和杰克逊1.5的实体,覆盖了我的JPA实体上的JAXB注释结果是一个坏主意。

一件事,杰克逊1.5对循环引用进行了无限递归。我认为操作员错误而不是错误。杰克逊是真棒的软件。此外,我认为即将到来的1.6版本提供了每个 jackson-235 。所以这可能很快就会理解!

我的其他困难与强烈连接实体面对序列化紧凑性。所有我的实体关系序列都是不切实际的。我将在每个请求中序列化一个淫秽的无关信息,并在所有实体关系到完全深度。

我想指定我的JAXB对象的多个序列化,根据预期用途选择一个具有适当字段和关系的序列化。但是,就我所知,JAXB和Jackson没有提供这种灵活性。它们在定义 表示中提供了重大的灵活性 - 什么是暂行的,如何列表看起来,但我认为一个对象不认为多个表示。也许有一个聪明的方法来定义JAXB或Jackson下的多个表示,并在运行时切换......如果存在这样的事情,我有兴趣了解。也许有一个功能,我很忽视,或者可以用子类化的一些诡计。但我找不到它,所以最终我放弃了DTOS。

再次,这一切都很特别适用于模型。也许这些是你的非问题(或者你可能对这些问题有聪明的解决方案!)

其他提示

这绝对可以完成。我实际上找到了维护代码来复制模型之间的展望更有问题。

eclipselink 是这个应用程序的一个很好的选择,因为它包含一个JPA(eclipselink是RI并从Toplink开放)和JAXB实现。

eclipelink jaxb(moxy)还包含映射JPA实体的许多扩展XML:

更多信息请参阅:

DatucleUS允许使用JPA到RDBMS(使用幕后的JDBC)和XML(使用幕后的JAXB)使用持久性。它可以将您的JPA注释分解为定义JAXB序列化的执行方式 - 如果您如此希望

,您也可以添加JAXB注释

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top