web-dev-qa-db-fra.com

Comment puis-je mapper une Java à DATETIME dans mysql (par défaut son TIMESTAMP) avec des annotations Hibernate

Toutes mes tables de base de données devraient avoir un champ endTime qui par défaut devrait être END_OF_TIME ou quelque chose comme ça. Je ne suis pas satisfait de la limitation 2038, donc je veux que endTime soit de type DATETIME dans mysql.

Mon Java est:

@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class BaseDBEntity {
@Id
@Column(length=36)
public String id;

@Temporal(TemporalType.TIMESTAMP) 
public Date startTime;

@Temporal(TemporalType.TIMESTAMP) 
public Date endTime;

public BaseDBEntity() {
}

}

Je peux contourner ce problème en créant la table manuellement avec un champ endTime de type DATETIME, puis en mappant l'entité endTime sur cette colonne, mais j'aimerais qu'Hibernate génère automatiquement les tables - comment faire?

30
user1023622

Utilisez l'attribut columnDefinition de @Column annotation :

@Column(name = "startTime", columnDefinition="DATETIME")
@Temporal(TemporalType.TIMESTAMP)
private Date startTime;

Et s'il vous plaît, rendez vos attributs privés.

68
JB Nizet