Question

Je dois concevoir un modèle de données (dans une application Java EE 6) qui sera persisté via JPA, qui doit également être sérialisé via JAXB.La dernière fois que j'ai fait cela, j'ai eu un groupe de classes d'entité avec des annotations Jaxb et une autre avec des annotations JPA.Cela signifiait que je devais avoir beaucoup de code de la chaudron pour la traduction entre les deux.Je pense y combiner, de sorte que chaque classe aura les deux types d'annotations.Je sais que cela peut être fait , mais ma question est, devrait elle sera?Cela causera-t-il des problèmes?

Était-ce utile?

La solution

La question est un peu trop large pour que je réponde. Mais j'ai une expérience connexe spécifique utilisant Jackson sous JAXB avec des entités JPA que vous pourriez trouver intéressantes.

Dans mon cas, j'ai eu un modèle JPA avec environ trois douzaines d'entités et beaucoup de références cycliques. Le graphique des relations entre entités était également presque fortement connecté. En d'autres termes, il était possible de naviguer à presque toutes les entités de l'ensemble de tout autre en suivant les relations avec l'entité. Dans mon cas, avec des entités telles que décrites et Jackson 1.5, superposez Jaxb Annotations sur mes entités JPA s'est avérée une mauvaise idée.

Pour une chose, Jackson 1.5 a eu une récursion infinie sur les références cycliques. Je considère que l'erreur de l'opérateur plutôt qu'un bug. Jackson est un logiciel génial. De plus, je pense que la version à venir 1.6 fournit de nouvelles fonctionnalités pour gérer cela par jackson-235 . Donc, cela pourrait être discuté bientôt!

Mon autre difficulté liée à la compacité sérialisée face aux entités fortement connectées. Serializing Toute mes relations d'entité était irréalisable. J'aurais sérialisé une quantité obscène d'informations non pertinentes dans chaque demande en suivant naïvement toutes les relations entiétaux à leur pleine profondeur.

Je souhaitais spécifier plusieurs sérialisations de mes objets JAXB, en choisissant un avec des champs et des relations appropriés en fonction de l'utilisation prévue. Mais, pour autant que je sache, Jaxb et Jackson n'offrent aucune telle flexibilité. Ils offrent une flexibilité significative dans la définition la représentation - Qu'est-ce qui est transitoire, comment les listes ont l'air, etc. - mais je ne pense pas que plusieurs représentations sont possibles pour un objet. Peut-être qu'il y a un moyen intelligent de définir plusieurs représentations sous Jaxb ou Jackson et basculer au moment de l'exécution ... Je serais intéressé à apprendre si une telle chose existe. Peut-être qu'il y a une fonctionnalité pour cela que je suis ignorant, ou de la superficie pouvant être jouée avec le sous-classement. Mais je ne pouvais pas le trouver, alors j'ai finalement abandonné et je suis allé avec Dto.

Encore une fois, tout cela est assez spécifique au modèle. Peut-être que ce sont des non-problèmes pour vous (ou peut-être que vous avez des solutions intelligentes pour ces problèmes!)

Autres conseils

Cela peut certainement être fait. En fait, je trouve la perspective de maintenir le code pour copier entre les modèles plus problématique.

Eclipselink est un excellent choix pour cette application car il contient à la fois une JPA (Eclipselink est le RI et ouvert provenant de TopLink) et une mise en œuvre JAXB.

Eclipelink Jaxb (Moxy) contient également un certain nombre d'extensions pour mapper des entités JPA à XML:

Pour plus d'informations, voir:

Datanuclevéus permet la persistance à l'aide de JPA à RDBMS (à l'aide de JDBC dans les coulisses) et XML (à l'aide de Jaxb derrière les scènes).Il peut interpréter vos annotations JPA comme définissant la manière dont la sérialisation JAXB est effectuée - vous pouvez également ajouter des annotations JAXB si vous le souhaitez si souhaité

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top