Pregunta

Tengo que diseñar un modelo de datos (en una solicitud de Java EE 6) que se persistirá a través de JPA, y que también debe ser serializado a través de Jaxb.La última vez que hice eso, tenía un grupo de clases de entidades con las anotaciones de Jaxb, y otra con las anotaciones de JPA.Esto significaba que tenía que tener un montón de código de placa de calderas para traducir entre los dos.Estoy pensando en combinarlos, para que cada clase tenga ambos tipos de anotaciones.Sé que esto se puede hacer , pero mi pregunta es, debería ser así?¿Causará algún problema?

¿Fue útil?

Solución

La pregunta es un poco demasiado amplia para que yo responda. Pero tengo experiencia relacionada específica utilizando Jackson bajo Jaxb con entidades JPA que puede encontrar interesante.

En mi caso, tuve un modelo de JPA con aproximadamente tres docenas de entidades y muchas referencias cíclicas. La gráfica de las relaciones entre entidades también estaba casi fuertemente conectada. En otras palabras, fue posible navegar a casi cualquier entidad en el set de cualquier otra por seguir las relaciones de la entidad. En mi caso, con entidades como se describe y Jackson 1.5, superpondiendo las anotaciones de Jaxb en mis entidades JPA resultó ser una mala idea.

Por un lado, Jackson 1.5 se metió en una recursión infinita en las referencias cíclicas. Considero que el error del operador en lugar de un error. Jackson es un software increíble. Además, creo que la próxima versión 1.6 ofrece nuevas funciones para manejar esto por jackson-235 . ¡Así que esto podría ser discutible pronto!

Mi otra dificultad relacionada con la compacidad serializada frente a las entidades fuertemente conectadas. Serializando todas las relaciones de mis entidades fue poco práctico. Habría sido serializado una cantidad obscena de información irrelevante en cada solicitud, siguiendo ingenuamente todas las relaciones de la entidad a su profundidad completa.

Quería especificar múltiples serializaciones de mis objetos JAXB, eligiendo uno con campos y relaciones apropiados según el uso previsto. Pero, por lo que sé, Jaxb y Jackson no ofrecen tal flexibilidad. Ofrecen una flexibilidad significativa en la definición de la representación : lo que es transitorio, cómo se ven las listas, etc., pero no creo que las representaciones múltiples son posibles para un objeto. Tal vez haya una forma inteligente de definir múltiples representaciones con Jaxb o Jackson y cambiar en tiempo de ejecución ... Me interesaría aprender si existe tal cosa. Tal vez haya una característica para esto que soy ignorante, o algún truco que se puede jugar con la subclasificación. Pero no pude encontrarlo, así que, en última instancia, me di por vencido y fui con DTOS.

de nuevo, todo esto es bastante específico para el modelo. Tal vez estos no son temas para usted (o quizás tenga soluciones inteligentes para estos problemas!)

Otros consejos

Esto se puede hacer definitivamente. En realidad, encuentro la perspectiva de mantener el código para copiar entre los modelos más problemáticos.

eclipselink es una excelente opción para esta aplicación, ya que contiene un JPA (EclipsElink es el RI y abierto de origen de TopLink), y una implementación de Jaxb.

Eclipelink Jaxb (Moxy) también contiene una serie de extensiones para asignar entidades JPA para XML:

Para obtener más información, consulte:

DatanCleus permite la persistencia con JPA a RDBMS (usando JDBC detrás de las escenas) y XML (utilizando Jaxb detrás de las escenas).Puede interpretar sus anotaciones de JPA como definición de cómo se realiza la serialización de Jaxb: puede agregar anotaciones de Jaxb también si lo desean

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top