我正在尝试阅读"终止日期"员工作业表中的列通过休眠。该列的日期类型为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;
答案 0 :(得分:0)
您在数据库中的列的类型为DATE
&您将其映射到TemporalType.TIMESTAMP类型,这意味着您实际上将其映射到java.sql.Timestamp。
如果您拥有column with TIMESTAMP
数据类型,建议您在实体类中成功映射,则必须将该属性映射到java.sql.Timestamp。
另一方面,如果您的数据库列的类型为DATE
,TIME
或DATETIME
,那么您可以将其映射到java.util.Date,java.sql.Date或java.util.Calendar
但是,java.util.Date存储日期&时间。因此,您必须明确指定数据库Date
,TIME
或both
中的内容。
<强> 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;时间戳数据。