J'ai trouvé une autre solution qui permet de ne pas coder en dur l'extrait de définition de colonne MySQL dans votre @Column
annotation. Définissez votre propre dialecte hibernate en remplaçant 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)" );
}
}
et spécifiez-le comme propriété hibernate hibernate.dialect=org.yourproject.MySQL564PlusDialect
(le dialecte que vous souhaitez étendre peut varier, par exemple org.hibernate.dialect.MySQL5InnoDBDialect
à la place).
Vous pouvez maintenant ajuster la précision de votre DATETIME
depuis @Column
annotation en utilisant length
attribut :
@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
...
qui produira DATETIME(3)
définition de colonne signifiant précision en millisecondes. Si vous avez besoin du simple DATETIME
(pas de fraction de seconde), mais ne spécifiez pas la longueur. Vous pouvez utiliser la valeur de length
jusqu'à 6, ce qui signifierait une précision de l'ordre de la microseconde.
S'il vous arrive d'utiliser un dialecte différent de celui ci-dessus (par exemple le standard org.hibernate.dialect.MySQLDialect
ou peut-être une autre base de données), qui ne cassera pas votre code :la length
attribut sur @Column
sera ignoré.
PS Il serait plus judicieux d'exploiter la precision
attribut de @Column
au lieu de length
, mais simple remplacement de "datetime($l)"
modèle avec "datetime($p)"
une dans ma propre implémentation de dialecte ne fonctionne pas spontanément.