Jeg har fundet en løsning mere, der gør det muligt ikke at hardkode MySQL-kolonnedefinitionskodestykket i din @Column
anmærkning. Definer din egen dvaledialekt ved at tilsidesætte 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)" );
}
}
og angiv den som hibernate-egenskab hibernate.dialect=org.yourproject.MySQL564PlusDialect
(den dialekt du ønsker at udvide kan variere, f.eks. org.hibernate.dialect.MySQL5InnoDBDialect
i stedet).
Nu kan du justere præcisionen af din DATETIME
fra @Column
annotering ved at bruge length
attribut:
@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
...
som vil producere DATETIME(3)
kolonnedefinition betyder millisekunders præcision. Hvis du har brug for den simple DATETIME
(ingen brøkdele sekunder), angiv bare ikke længden. Du kan bruge værdien length
op til 6, hvilket ville betyde mikrosekunders præcision.
Hvis du tilfældigvis bruger en anden dialekt end ovenstående (for eksempel standarden org.hibernate.dialect.MySQLDialect
eller måske en anden database), der ikke ødelægger din kode:length
attribut på @Column
vil blive ignoreret.
P.S. Det ville være mere fornuftigt at udnytte precision
attribut for @Column
i stedet for length
, men simpel udskiftning af "datetime($l)"
mønster med "datetime($p)"
en i min egen dialektimplementering virker ikke direkte.