我怎样才能在mysql中映射一个Java日期为DATETIME(默认情况下它的时间戳)与Hibernate的注解 [英] How can I map a Java date to DATETIME in mysql (by default its TIMESTAMP) with Hibernate annotations

查看:861
本文介绍了我怎样才能在mysql中映射一个Java日期为DATETIME(默认情况下它的时间戳)与Hibernate的注解的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我所有的数据库表应该有它默认应该是END_OF_TIME或类似的东西的结束时间字段。我不开心对2038的限制,所以我想结束时间是在MySQL的DateTime类型。

我的Java code是:

  @MappedSuperclass
@Inheritance(策略= InheritanceType.TABLE_PER_CLASS)
公共类BaseDBEntity {
@ID
@Column(长度= 36)
公共字符串ID;@Temporal(TemporalType.TIMESTAMP)
公开日期的startTime;@Temporal(TemporalType.TIMESTAMP)
公开日期结束时间;公共BaseDBEntity(){
}}

我可以解决与DateTime类型的结束时间字段中手动创建表,而且比实体结束时间映射到该列,不过,我想Hibernate来自动生成的表 - 我怎么能做到这一点。

解决方案

使用的 columnDefinition 属性=htt​​p://download.oracle.com /javaee/6/api/javax/persistence/Column.html> @Column 注释

  @Column(NAME =的startTime,columnDefinition =DATETIME)
@Temporal(TemporalType.TIMESTAMP)
私人日期的startTime;

和请,让你的私有属性。

All my db tables should have an endTime field which by default should be END_OF_TIME or something like that. I am not happy about the 2038 limitation so I want endTime to be of type DATETIME in mysql.

My Java code is:

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

}

I can work around by creating the table manually with an endTime field of type DATETIME, and than map the entity endTime to that column, however I would like Hibernate to generate the tables automatically - how can I do that?

解决方案

Use the columnDefinition attribute of the @Column annotation:

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

And please, make your attributes private.

这篇关于我怎样才能在mysql中映射一个Java日期为DATETIME(默认情况下它的时间戳)与Hibernate的注解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆