Ho trovato un'altra soluzione che consente di non codificare lo snippet di definizione della colonna MySQL nel tuo @Column
annotazione. Definisci il tuo dialetto di ibernazione sovrascrivendo org.hibernate.dialect.MySQLDialect
:
package org.yourproject;
import java.sql.Types;
import org.hibernate.dialect.MySQL5Dialect;
public class MySQL564PlusDialect extends MySQL5Dialect {
public MySQL564PlusDialect() {
super();
registerColumnType( Types.TIMESTAMP, 6, "datetime($l)" );
}
}
e specificalo come proprietà di ibernazione hibernate.dialect=org.yourproject.MySQL564PlusDialect
(il dialetto che vorrai estendere può variare, ad esempio org.hibernate.dialect.MySQL5InnoDBDialect
invece).
Ora puoi regolare la precisione del tuo DATETIME
da @Column
annotazione utilizzando length
attributo:
@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
...
che produrrà DATETIME(3)
definizione di colonna che significa precisione in millisecondi. Se hai bisogno del semplice DATETIME
(nessuna frazione di secondo), semplicemente non specificare la lunghezza. Puoi usare il valore di length
fino a 6 che significherebbe una precisione di microsecondi.
Se ti capita di usare un dialetto diverso da quello sopra (ad esempio lo standard org.hibernate.dialect.MySQLDialect
o forse qualche altro database), che non interromperà il tuo codice:la length
attributo su @Column
verrà ignorato.
PS Sarebbe più sensato sfruttare la precision
attributo di @Column
invece di length
, ma semplice sostituzione di "datetime($l)"
modello con "datetime($p)"
uno nel mio dialetto l'implementazione non funziona in modo immediato.