Jag har hittat ytterligare en lösning som gör det möjligt att inte hårdkoda MySQL-kolumndefinitionskod i din @Column anteckning. Definiera din egen vilolägesdialekt genom att åsidosätta 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)" );
}
}
och ange den som hibernate-egenskap hibernate.dialect=org.yourproject.MySQL564PlusDialect (dialekten du vill utöka kan variera, t.ex. org.hibernate.dialect.MySQL5InnoDBDialect istället).
Nu kan du justera precisionen för din DATETIME inifrån @Column anteckning genom att använda length attribut:
@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
...
som kommer att producera DATETIME(3) kolumndefinition betyder millisekunders precision. Om du behöver den enkla DATETIME (inga bråkdelar av sekunder), ange bara inte längden. Du kan använda värdet length upp till 6 vilket skulle innebära mikrosekunders precision.
Om du råkar använda en annan dialekt än den ovan (till exempel standarden org.hibernate.dialect.MySQLDialect eller kanske någon annan databas), som inte bryter din kod:length attribut på @Column kommer att ignoreras.
P.S. Det skulle vara mer förnuftigt att utnyttja precision attribut för @Column istället för length , men enkel ersättning av "datetime($l)" mönster med "datetime($p)" en i min egen dialektimplementering fungerar inte direkt.