如何在hibernate中从Date类型列中读取null

时间:2014-11-17 22:54:03

标签: java mysql sql-server hibernate date

我正在尝试阅读"终止日期"员工作业表中的列通过休眠。该列的日期类型为DATE。对于没有终止日期的员工,这些值为空。

问题是当我尝试读取空终止日期时,hibernate会以某种方式给我当前日期作为响应。但是,如果日期值不为null,则hibernate将读取正确的日期。

我想知道当终止日期为null时,如何防止hibernate给我当前日期而不是null。谢谢!

以下是列的映射方式:

@Embedded
@AttributeOverrides({@AttributeOverride(name = "terminationDate", column = @Column(name = Columns.TERMINATION_DT, nullable = true)) })
private PersonJob personJob;
.....
// PersonJob.java
@Temporal(TemporalType.TIMESTAMP)
private Calendar terminationDate;

1 个答案:

答案 0 :(得分:0)

您在数据库中的列的类型为DATE&您将其映射到TemporalType.TIMESTAMP类型,这意味着您实际上将其映射到java.sql.Timestamp

如果您拥有column with TIMESTAMP数据类型,建议您在实体类中成功映射,则必须将该属性映射到java.sql.Timestamp

另一方面,如果您的数据库列的类型为DATETIMEDATETIME,那么您可以将其映射到java.util.Datejava.sql.Datejava.util.Calendar

但是,java.util.Date存储日期&时间。因此,您必须明确指定数据库DateTIMEboth中的内容。

<强> From Hibernate DOCs

In plain Java APIs, the temporal precision of time is not defined. When dealing with 
temporal data you might want to describe the expected precision in database. Temporal 
data can have DATE, TIME, or TIMESTAMP precision (ie the actual date, only the time, 
or both). Use the @Temporal annotation to fine tune that.

您可能需要查看TemporalTypeResolver.java的Hibernate项目代码段。

对于MySQL: Here是对DateTime&amp; amp;时间戳数据。