为什么有必要在javax.persistence中注释映射的Date字段@Temporal?

amp*_*ent 4 java orm persistence

格式如下:

@Temporal(TemporalType.DATE)
@Column(name="CREATED_DATE")
private Date createdDate;
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么有必要注释映射java.util.Date领域@Temporaljavax.persistence?如果局部变量显然被声明为Date并且DB中的列数据类型也是日期(时间)或时间戳类型之一,那么很难推断出我们正在处理数据的时间位没有在多个地方冗余地指定它?

wgi*_*cht 6

从例如java.util.Date来看,如果想要映射到DATE或TIMESTAMP数据库类型并不明显.java.sql.Date/Time只有例外.

  • 1)对于简单的项目,让orm创建表是很常见的2)它与所有其他数据类型不同,存在1:1关系(例如string-varchar等).一个相关的问题是例如布尔转换(T/F与Y/N)以及提供自定义转换器的可能性:AttributeConverter (3认同)
  • 这里有更详细的解释:http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes#Temporal.2C_Dates.2C_Times.2C_Timestamps_and_Calendars (3认同)

Ara*_*oft 5

当您想将 a 存储java.util.Date在数据库中时,可以通过三种不同的方式完成:

1-仅存储日期 ( java.sql.Date):年/月/日

2- 存储日期和时间 ( java.sql.Time): 日期 + 小时/分钟/秒

3-存储时间戳(java.sql.Timestamp):日期+时间+纳秒

通过提供,@Temporal您必须选择TemporalType.DATETemporalType.TIMETemporalType.TIMESTAMP来确定您的信息的准确性java.util.Date