JAXB对象 – 哈希码和等号

我们有一个巨大的Java应用程序,完全基于JAXB序列化。中间件服务器完成所有数据库访问并发送JAXB对象中的所有数据对象并序列化为XML并将数据发送到UI(C#.Net)。

数据从db访问到JAXB java对象的大部分时间后,我将不得不进行一些处理,比如“根据属性对对象集合进行排序”,找到avg,对对象列表进行一些计算。收集等

我的主要问题是,JAXB对象没有equals和hashcode。 所以我正在做的是将所有数据移动到一些用户定义的数据对象,其中我有hashcode,equals,compareTo定义,所以我可以在集合中执行所有操作,然后复制到JAXB对象。 我认为这是一个额外的开销。

问题:

1)jaxb对象是否支持equals / hashcode / compareTo – 我可以在模式中指定这些吗?

2)还有其他更好的选择吗?

谢谢。

不幸的是,jaxb没有提供开箱即用的function。 您可以使用此插件 ,或编写自己的插件以获得更多可自定义的行为。

看起来你需要使用Collections.sort(list,Comparable)来完成你想要的排序。 由于您的案例依赖于特定属性的比较而不是整个对象,因此Equals和hashcode对您提到的任何一种情况都没有帮助。

查找平均值和执行计算的其他情况也与我可以看到的equals / hashcode无关。 这些操作只需要解析列表并执行适当的算法。

FWIW,虽然JAXB生成的Java类不具有equals和hashcode,但您可以在使用JAXB注释编写的类中添加这些覆盖 – JAXB将忽略这些方法。

maven-jaxb2-plugin可以使用自己的插件生成hashcode和equals方法: org.jvnet.jaxb2_commons 。 有关配置的更多详细信息,请参见此处 。

pom.xml的相关部分如下:

    org.jvnet.jaxb2_commons jaxb2-basics 0.11.0      org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.13.1   generate  generate      -XtoString -Xequals -XhashCode    org.jvnet.jaxb2_commons jaxb2-basics 0.11.0   ${project.basedir}/src/main/resources true