Encontrei mais uma solução que permite não codificar o trecho de definição de coluna MySQL em seu
@Column anotação. Defina seu próprio dialeto de hibernação substituindo 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 especifique-a como propriedade de hibernação
hibernate.dialect=org.yourproject.MySQL564PlusDialect (o dialeto que você deseja estender pode variar, por exemplo, org.hibernate.dialect.MySQL5InnoDBDialect em vez de). Agora você pode ajustar a precisão do seu
DATETIME de dentro de @Column anotação usando length atributo:@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
...
que produzirá
DATETIME(3) definição de coluna que significa precisão de milissegundos. Se você precisar do simples DATETIME (sem segundos fracionários), apenas não especifique o comprimento. Você pode usar o valor de length até 6, o que significaria precisão de microssegundos. Se você usar um dialeto diferente do acima (por exemplo, o padrão
org.hibernate.dialect.MySQLDialect ou talvez algum outro banco de dados), que não quebrará seu código:o length atributo em @Column será ignorado. P.S. Seria mais sensato explorar a
precision atributo de @Column em vez de length , mas simples substituição de "datetime($l)" padrão com "datetime($p)" um em minha própria implementação de dialeto não funciona de improviso.