Thursday, October 6, 2016

Support custom data types in eclipselink · ancoron , pancoran






+

I tipi di dati di sostegno personalizzati in EclipseLink Qui voglio descrivere i passi che sono necessari al fine di sostenere un mapping dei tipi di dati personalizzati in EclipseLink. In EclipseLink (che è l'implementazione di riferimento per JPA 2.0) dobbiamo usare i cosiddetti "convertitori" per mappare un tipo Java per un tipo di dati SQL. Il convertitore è responsabile di quanto segue: definire il mapping dei tipi di dati (che tipo di dati di database deve essere utilizzato) convertire il valore Java ad un valore compreso dal database (o il driver JDBC) convertire il valore del database ad un valore Java Per fare questo EclipseLink fornisce un'interfaccia che deve essere implementata. Quanto segue è il più semplice esempio per supportare la mappatura UUID (grazie Edward Mann): Annota JPA Entity Ora basta scrivere il convertitore non è sufficiente. Per finalmente fare EclipseLink consapevoli di questo si deve annotare il tuo entità applicazione con l'annotazione convertitore in questo modo: Quindi, ora si è pronti ad andare e la java. util. UUID andrà dritto da e per il driver JDBC ed essere mappata correttamente al database. Anche il tipo di dati verrà impostato su "UUID" all'interno della tabella in modo appropriato quando si lascia EclipseLink creare le tabelle. Ma aspetta, questo impone un problema: cosa succede se vorrei mantenere il mio portatile applicazione ad altri database e / o altre implementazioni JPA? Questo è sicuramente vero se l'applicazione dovrebbe essere utilizzabile all'interno di una vasta gamma di ambienti. Inoltre è sempre una buona idea di non restringere troppo se stessi tanto da una singola implementazione, altrimenti si perde i benefici di APP in ogni caso e si potrebbe scrivere probabilmente molto più efficiente del codice quando si utilizza direttamente le capacità delle implementazioni. Quindi dobbiamo sbarazzarsi di tutte quelle cose convertitore all'interno del nostro organismo, ma come facciamo poi specificare alcune mappatura dei dati / conversione nel nostro caso EclipseLink? Ebbene, EclipseLink basa il suo lavoro sul concetto di sessioni e così, supporta SessionEventListeners, come questo (Stripped exampled - completa coe qui): Come potete vedere abbiamo già fatto una semplice ottimizzazione lì: abbiamo solo anche prendere mapping dei campi in considerazione che sono ritenuti essere serializzato per il database come un array di byte (SerializedObjectConverter). Questo è il caso ogni volta che EclipseLink incontra un certo tipo di dati che non capisce nativamente (significato, che JPA 2.0 non supporta out of the box). Il modo per implementare l'attuale campo di ricerca Java dall'attributo e determinare se si tratta di un tipo di essere migliorata con la conversione è completamente a voi, ma per essere generica la maggior parte degli implementatori userebbe riflessione per questo. L'ultimo passo che dobbiamo fare ora è quello di specificare la nostra nuova SessionEventListener all'interno del persistence. xml di serie: Ora, è tutto pronto e il vostro soggetto è tornato a puro livello JPA: Quindi, il codice è libero di roba specifico fornitore e che la proprietà aggiuntiva all'interno del persistence. xml non sarà raccolto da qualsiasi provider che non supporta questo.




No comments:

Post a Comment