Ik heb nog een oplossing gevonden waarmee je het MySQL-kolomdefinitiefragment niet hard kunt coderen in je @Column
annotatie. Definieer uw eigen hibernate-dialect door org.hibernate.dialect.MySQLDialect
te overschrijven :
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)" );
}
}
en specificeer het als slaapstand eigenschap hibernate.dialect=org.yourproject.MySQL564PlusDialect
(het dialect dat u wilt uitbreiden kan variëren, bijv. org.hibernate.dialect.MySQL5InnoDBDialect
in plaats daarvan).
Nu kunt u de precisie van uw DATETIME
. aanpassen vanuit @Column
annotatie met behulp van length
kenmerk:
@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
...
wat DATETIME(3)
. oplevert kolomdefinitie wat millisecondenprecisie betekent. Als je de eenvoudige DATETIME
. nodig hebt (geen fractionele seconden), geef alleen geen lengte op. U kunt de waarde van length
. gebruiken tot 6, wat een precisie van microseconden zou betekenen.
Als je toevallig een ander dialect gebruikt dan het bovenstaande (bijvoorbeeld het standaard org.hibernate.dialect.MySQLDialect
of misschien een andere database), die je code niet zal breken:de length
attribuut op @Column
wordt genegeerd.
PS Het zou verstandiger zijn om gebruik te maken van de precision
attribuut van @Column
in plaats van length
, maar eenvoudig vervangen van "datetime($l)"
patroon met "datetime($p)"
een in mijn eigen dialectimplementatie werkt niet zomaar.