如何使用Hibernate注释将Java日期映射到mysql中的DATETIME(默认情况下为TIMESTAMP)

use*_*622 31 java mysql annotations hibernate

我的所有数据库表都应该有一个endTime字段,默认情况下应该是END_OF_TIME或类似的东西.我对2038的限制不满意所以我希望endTime在mysql中的类型为DATETIME.

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

}
Run Code Online (Sandbox Code Playgroud)

我可以通过使用DATETIME类型的endTime字段手动创建表,然后将实体endTime映射到该列,但是我希望Hibernate自动生成表 - 我该怎么做?

JB *_*zet 69

使用注释columnDefinition属性:@Column

@Column(name = "startTime", columnDefinition="DATETIME")
@Temporal(TemporalType.TIMESTAMP)
private Date startTime;
Run Code Online (Sandbox Code Playgroud)

请将您的属性设为私有.

  • 为"请将您的属性设为私有"+1 (12认同)
  • 是的.@Temporal注释告诉Hibernate它是否应该使用java.sql.Date或java.sql.Timestamp来存储从数据库中读取的日期.两者都扩展了java.util.Date类,但java.sql.Date不保存任何时间信息:只有日期. (8认同)
  • 是`Date`,`java.sql.Date`还是`java.util.Date`? (8认同)
  • 它必须是`java.util.Date`否则你会得到一堆例外. (8认同)
  • 这样可行!为什么仍然需要使用@Temporal注释?看起来没有额外的效果. (3认同)