Combiner JAXB et JPA dans un modèle
Je dois concevoir un modèle de données (dans une application Java EE 6) qui sera conservée par JPA, et qui doit aussi être sérialisé par JAXB. La dernière fois que je l'ai fait, j'ai eu un groupe de classes d'entité avec des annotations JAXB, et un autre avec des annotations JPA. Cela signifiait que je devais avoir beaucoup de code réutilisable pour la conversion entre les deux. Je suis en train de penser à les combiner, de sorte que chaque classe aura deux types d'annotations. Je sais que ce peut être fait, mais ma question est, devrait - il être? Ça va causer des problèmes?
source d'informationauteur Mike Baranczak
Vous devez vous connecter pour publier un commentaire.
La question est un peu trop large pour moi de répondre. Mais j'ai spécifiques liés à l'expérience à l'aide de Jackson sous JAXB avec des entités JPA que vous pourriez trouver intéressant.
Dans mon cas, j'ai eu une JPA modèle avec environ trois douzaine d'entités et beaucoup de références cycliques. Le graphique de relations entre entités, a été presque aussi fortement liées. En d'autres termes, il est possible de naviguer à près de toute entité dans l'ensemble de toutes les autres par la suite entités-relations. Dans mon cas, avec des entités comme décrit et Jackson 1.5, en superposant les annotations JAXB sur mon entités JPA s'est avéré être une mauvaise idée.
Pour une chose, Jackson 1.5 a obtenu dans une récursion infinie sur le cyclique références. Je considère que l'erreur de l'opérateur plutôt que d'un bug. Jackson est génial logiciel. Aussi, je pense que la prochaine 1.6 version propose de nouvelles fonctionnalités pour gérer ce par JACKSON-235. Donc cela peut être discutable bientôt!
Mon autre difficulté liée à sérialisé la compacité dans le visage de fortement entités connectées. La sérialisation de toutes mes relations d'entités n'était pas pratique. J'aurais sérialisé un montant obscène d'informations non pertinentes dans chaque demande naïvement la suite de toutes les entités-relations avec leur profondeur.
Je voulais spécifier plusieurs serializations de mon JAXB objets, sélectionnez l'une avec les champs appropriés et de relations en fonction de l'utilisation prévue. Mais, autant que je sache, JAXB et Jackson offrent pas une telle souplesse. Ils offrent une grande souplesse dans la définition de la représentation -- ce qui est transitoire, l'apparence des listes, etc. -- mais je ne pense pas, plusieurs représentations sont possibles pour un objet. Peut-être il ya un moyen astucieux pour définir de multiples représentations sous JAXB ou Jackson et le commutateur au moment de l'exécution... je serais intéressé de savoir si une telle chose existe. Peut-être il y a une option pour cela que je suis ignorant, ou quelques astuces qui peuvent être joués avec des sous-classement. Mais je ne pouvais pas le trouver, alors finalement, j'ai abandonné et suis allé avec des Otd.
Encore une fois, tout cela est très spécifique au modèle. Peut-être que ce sont des non-questions pour vous (ou peut-être vous avez des solutions intelligentes pour ces problèmes!!!)
Cela peut certainement être fait. Je trouve la perspective de maintenir le code pour copier entre les modèles de plus en plus problématique.
EclipseLink est un excellent choix pour cette application car il contient à la fois une JPA (EclipseLink est le RI et open source de TopLink), et un JAXB mise en œuvre.
EclipeLink JAXB (MOXy) contient également un certain nombre d'extensions pour la cartographie des entités JPA XML:
Pour plus d'informations, voir:
DataNucleus permet la persistance en utilisant JPA de SGBDR (à l'aide de JDBC derrière les scènes) et XML (à l'aide de JAXB derrière les scènes). Il peut interpréter votre annotations JPA comme définissant la façon dont le JAXB de la sérialisation est - ce que vous pourriez ajouter des annotations JAXB aussi, si vous le souhaitait