Domanda

I miei soggetti attualmente contiene java proprietà Data. Sto iniziando a utilizzare Joda Time for manipolazione data e calcoli abbastanza frequentemente. Ciò significa che sono costantemente dover convertire le date in oggetti Joda DateTime e viceversa.

Quindi mi chiedevo, c'è qualche ragione per cui non dovrei cambiare le mie entità per memorizzare Joda DateTime oggetti invece di Java oggetti Date?

Si prega di notare che queste entità sono persistenti tramite Hibernate. Ho trovato il jodatime-hibernate progetto, ma ho anche leggevo sulla mailing Joda lista che non era compatibile con le versioni più recenti di sospensione. E sembra come se non è molto ben tenuto.

Quindi mi chiedo se sarebbe meglio per continuare appena la conversione tra Data e DateTime, o se sarebbe saggio iniziare persistenti DateTime oggetti. La mia preoccupazione è essere affidamento su una libreria di scarsa manutenzione.

Edit: Si noti che uno dei miei obiettivi è quello di essere maggiormente in grado di memorizzare le informazioni fuso orario. Memorizzazione solo una data appare per salvare la data nel fuso orario locale. Come la mia applicazione può essere utilizzata a livello globale, ho bisogno di sapere il fuso orario pure. Joda tempo Hibernate sembra affrontare questo anche in il manuale d'uso .

È stato utile?

Soluzione

Credo che utilizzando il Joda DateTime come il bean tipo di proprietà è probabilmente una buona idea. È quindi possibile avere Hibernate fare la conversione e salvare la proprietà come il formato nativo della data di database.

Ho usato personalmente jodatime-ibernazione e non hanno avuto un problema con esso (stiamo usando Hibernate 3.2.5GA).

Se hai dubbi su jodatime-sospensione, si può sempre utilizzare meccanismo di tipo personalizzato di mappatura di Hibernate (che sono sicuro che è tutto jodatime-ibernazione fa).

Altri suggerimenti

Joda tempo Hibernate può essere utilizzato con le recenti versioni di Hibernate - potrebbe essere necessario un po 'di ottimizzare il grafico delle dipendenze questo è tutto (le esclusioni di impostazione per esempio). Posso anche suggerire si guarda tipo di utente, che ho pubblicato su Sourceforge. Ciò fornisce tipi di utente per Joda tempo che mirano a evitare il problema di offset cliente lei ha citato. Gradirei tutte le risposte avete su quel progetto. https://sourceforge.net/projects/usertype/files/

Saluti Chris.

Quindi, per riassumere:

java.util.Date

  • + il supporto nativo a Hibernate
  • - Bad API

Joda Time

  • + migliore API
  • - la mancanza di un supporto nativo a Hibernate

Personalmente, se potessi mantenere il modello di dominio e di "livello di servizio" pulito da solo utilizzando una libreria di terze parti (a quanto pare tipo di utente per Hibernate in questo caso) e l'alternativa sarebbe quella di scrivere del codice in più per fare la conversione "manualmente" ogni volta che era necessario, mi piacerebbe andare con la libreria di terze parti.

Le date non devono essere conservati con un alto livello di astrazione come, ad esempio, una stringa ( "2009-08-07 07:43:19 ..."), né come oggetti Java. Essi deve essere mantenuta come millisecondi dal dell'epoca. Sia il tempo Joda e il regolare Java data e ora può dare il tempo in millisecondi dal dell'epoca. Memorizzare il numero di millisecondi trascorso e riconvertire gli oggetti quando stai leggendo indietro dal vostro DB.

Il persistere pesi massimi Data oggetti invece di un tempo è un po 'come con i numeri in virgola mobile per rappresentare gli importi monetari:. È in genere un grande odore di codice

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