12
votes

Objets Jaxb - Hashcode et égaux

Nous avons une énorme application Java qui fonctionne entièrement basée sur la série JAXB.Le serveur de middleware fait tous accès à dB et envoie tous les objets de données dans les objets JAXB et Serialises à XML et envoie les données à l'interface utilisateur (C # .NET). < / p>

La plupart des temps après l'accès des données à partir d'un accès à la base de données dans les objets JAXB Java, je devrai avoir un certain traitement comme "Trier la collecte des objets en fonction de l'attribut", trouvez l'AVG, effectuez des calculs sur la liste des objets dans la collection, etc.

Mon problème majeur est que les objets Jaxb n'ont pas d'équivalent ni de hashcode. Donc, ce que je fais, c'est bouleverser toutes les données sur certains objets de données définis par l'utilisateur où je dispose de cassette, est égal à ce que je puisse créer toutes les opérations dans les collections, puis de copier les objets JAXB. Je pense que c'est une surcharge supplémentaire.

questions:

1) Les objets JAXB supportent-ils des égaux / HASHCODE / REPARATEO - puis-je spécifier ceux-ci dans Schema?

2) toute autre meilleure alternative?

merci.


0 commentaires

4 Réponses :


3
votes

On dirait que vous devez utiliser collections.sort (Liste, comparable) pour accomplir le tri que vous voulez. Equals and HashCode n'entraidera pas l'un des cas que vous avez mentionnés depuis que vos affaires s'appuient sur la comparaison d'attributs spécifiques, pas l'objet dans son ensemble.

Les autres cas de trouver des moyennes et des calculs effectuant n'ont également rien à voir avec des égaux / Hashcode que je peux voir. Ces opérations nécessiteraient simplement l'analyse des listes et effectueraient votre algorithme approprié.


2 commentaires

C'est une bonne idée de remplacer le comparète. Mais mon problème est non seulement le tri. Je fais tout type de traitement, comme la construction d'un arbre imbriqué de ces objets où j'ai besoin de les mettre dans Hashmap, etc. Je dois aussi avoir une solution de contournement pour le hashcode et égale également;


Ceci est un scénario différent de votre question réelle. Vous devriez également définir davantage les exigences relatives à votre arborescence imbriquée qui expliquent la nécessité de remplacer les équivalents / hachage. Jusqu'à présent, vous dites que vous devez remplacer, mais que vous n'avez apporté aucune bonne raison.



10
votes

Malheureusement, JAXB ne fournit pas cela hors de la boîte. Vous pouvez utiliser ce plugin ou écrire votre propre pour un comportement plus personnalisable.


1 commentaires

2
votes

FWIW, tandis que les classes Java générées JAXB n'auront pas égaux ni hashcode, vous pouvez ajouter ces substitutions dans les classes que vous écrivez avec Jaxb Annotations - JAXB ignorera les méthodes.


1 commentaires

J'aurais peut-être été incertain - je voulais dire que les classes avec des annotations peuvent également avoir des égaux et des hachages, et non que des égaux et des hachices peuvent être ajoutés à l'aide d'annotations.



0
votes

Maven-Jaxb2-plugin peut générer une méthode HASHCODE et EQUIES en utilisant son propre plugin: org.jvnet.jaxb2_commons . Plus de détails sur la configuration peuvent être trouvés ici .

Les parties pertinentes du POM.XML sont les suivantes: P>

<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>


0 commentaires