Domanda

Devo progettare un modello di dati (in un'applicazione Java EE 6) che verrà mantenuto tramite JPA e che dovrà anche essere serializzato tramite JAXB.L'ultima volta che l'ho fatto, avevo un gruppo di classi di entità con annotazioni JAXB e un altro con annotazioni JPA.Ciò significava che dovevo avere molto codice standard per la traduzione tra i due.Sto pensando di combinarli, in modo che ogni classe abbia entrambi i tipi di annotazioni.lo so Potere essere fatto, ma la mia domanda è: Dovrebbe essere?Causerà qualche problema?

È stato utile?

Soluzione

La domanda è un po 'troppo ampia per me per rispondere. Ma ho un'esperienza correlata specifica usando jackson sotto Jaxb con entità JPA che potresti trovare interessante.

Nel mio caso, ho avuto un modello JPA con circa tre dozzine e un sacco di riferimenti ciclici. Anche il grafico delle relazioni tra entità era quasi fortemente connesso. In altre parole, è stato possibile navigare in quasi tutte le entità nel set da qualsiasi altro seguendo le relazioni di entità. Nel mio caso, con entità come descritto e Jackson 1.5, sovrapponendo le annotazioni JAXB sulle mie entità JPA si sono rivelate una cattiva idea.

Per una cosa, Jackson 1.5 ha avuto un'infinita ricorsione sui riferimenti ciclici. Considero quell'errore dell'operatore piuttosto che un bug. Jackson è un software fantastico. Inoltre, penso che la prossima versione 1.6 fornisca nuove funzionalità da gestire questo per jackson-235 . Quindi questo potrebbe essere accusato presto!

Le mie altre difficoltà relative alla compattezza serializzata di fronte alle entità fortemente connesse. La serializzazione di tutte le mie relazioni di entità non è stata impraticabile. Avrei serializzato una quantità oscena di informazioni irrilevanti in ogni richiesta mediante ingenuamente seguendo tutte le relazioni di entità con la loro piena profondità.

Volevo specificare più serializzazioni dei miei oggetti JaxB, scegliendo uno con campi e relazioni appropriati a seconda dell'uso previsto. Ma, per quanto ne so, Jaxb e Jackson non offrono tale flessibilità. Offrono una straordinaria flessibilità nella definizione di la rappresentazione - cosa è transitorio, come elenca gli elenchi, ecc. - Ma non penso che più rappresentazioni siano possibili per un oggetto. Forse c'è un modo intelligente per definire più rappresentazioni sotto Jaxb o Jackson e passare a runtime ... Sarei interessato a imparare se esiste una cosa del genere. Forse c'è una caratteristica per questo che sono ignorante, o qualche inganno che può essere giocato con la sottoclassamento. Ma non riuscivo a trovarlo, quindi alla fine mi sono arreso e sono andato con Dto.

Ancora una volta, questo è tutto abbastanza specifico per il modello. Forse questi non sono problemi per te (o forse hai soluzioni intelligenti per questi problemi!)

Altri suggerimenti

Questo può sicuramente essere fatto.In realtà trovo più problematica la prospettiva di mantenere il codice da copiare tra i modelli.

EclipseLink è un'ottima scelta per questa applicazione poiché contiene sia un JPA (EclipseLink è l'RI e open source di TopLink) sia un'implementazione JAXB.

EclipeLink JAXB (MOXy) contiene anche una serie di estensioni per mappare entità JPA su XML:

Per ulteriori informazioni, vedere:

DataNucleo consente la persistenza utilizzando JPA a RDBMS (utilizzando JDBC dietro le quinte) e XML (utilizzando JaxB dietro le quinte).Può interpretare le tue annotazioni JPA come definire come viene eseguita la serializzazione JAXB - è possibile aggiungere anche annotazioni JAXB se tu desideri

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top