繁体   English   中英

JAXB对象 - 哈希码和等号

[英]JAXB objects - hashcode and equals

我们有一个巨大的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没有提供开箱即用的功能。 您可以使用此插件 ,或编写自己的插件以获得更多可自定义的行为。

看起来你需要使用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的相关部分如下:

<project
  <!-- other configuration -->
  <dependencies>
    <!-- other dependencies -->
    <dependency>
      <groupId>org.jvnet.jaxb2_commons</groupId>
      <artifactId>jaxb2-basics</artifactId>
      <version>0.11.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.13.1</version>
        <executions>
          <execution>
            <id>generate</id>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <args>
            <arg>-XtoString</arg>
            <arg>-Xequals</arg>
            <arg>-XhashCode</arg>
          </args>
          <plugins>
            <plugin>
              <groupId>org.jvnet.jaxb2_commons</groupId>
              <artifactId>jaxb2-basics</artifactId>
              <version>0.11.0</version>
            </plugin>
          </plugins>
          <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory>
          <cleanPackageDirectories>true</cleanPackageDirectories>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM