Našel jsem ještě jedno řešení, které umožňuje nekódovat napevno fragment definice sloupce MySQL ve vašem @Column anotace. Definujte svůj vlastní hibernační dialekt přepsáním 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)" );
}
}
a zadejte ji jako vlastnost hibernace hibernate.dialect=org.yourproject.MySQL564PlusDialect (dialekt, který chcete rozšířit, se může lišit, např. org.hibernate.dialect.MySQL5InnoDBDialect místo).
Nyní můžete upravit přesnost DATETIME v rámci @Column anotace pomocí length atribut:
@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
...
což vytvoří DATETIME(3) definice sloupce znamená přesnost na milisekundy. Pokud potřebujete jednoduchý DATETIME (žádné zlomky sekund), jen neuvádějte délku. Můžete použít hodnotu length až 6, což by znamenalo přesnost v mikrosekundách.
Pokud náhodou používáte dialekt odlišný od výše uvedeného (například standardní org.hibernate.dialect.MySQLDialect nebo možná nějaká jiná databáze), která nenaruší váš kód:length atribut na @Column bude ignorováno.
P.S. Bylo by rozumnější využít precision atribut @Column místo length , ale jednoduché nahrazení "datetime($l)" vzor s "datetime($p)" jeden v mé vlastní dialektové implementaci nefunguje z ruky.