web-dev-qa-db-ja.com

Hibernateアノテーションを使用してmysql(デフォルトではTIMESTAMP)でJava日付をDATETIMEにマッピングするにはどうすればよいですか?

すべてのdbテーブルには、デフォルトでEND_OF_TIMEなどのendTimeフィールドが必要です。私は2038年の制限に満足していないため、mysqlでendTimeをDATETIME型にする必要があります。

My Javaコードは:

@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() {
}

}

DATETIME型のendTimeフィールドを使用してテーブルを手動で作成し、エンティティのendTimeをその列にマップすることで回避できますが、Hibernateでテーブルを自動的に生成したいのですが、どうすればよいですか?

30
user1023622

@ColumnアノテーションのcolumnDefinition属性を使用します

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

そして、属性を非公開にしてください。

68
JB Nizet