我有一个使用hibernate映射的应用程序在SQL Server数据库表中执行多个DATETIME列的选择。 hibernate映射采用此DATETIME并将其转换为应用程序中的java.util.Date对象。
Database table
Start_time | datetime
10-OCT-2014 06:45:00
10-OCT-2014 13:30:00
问题是存储在数据库的DATETIME字段中的时间被删除/截断,并且当hibernate将它们带入应用程序时,每个日期的返回时间为00:00:
Hibernate Column mapping:
.
.
<property name="start_dt" type="java.util.Date">
<column name="Start_time"/>
</property>
.
我将它映射到具有正确getter / setter的日期对象,我的查询执行如下所示:
Query query = session.createSQLQuery("SELECT Start_time FROM table")
.addScalar("Start_time", Hibernate.Date)
.setResultTransformer(Transformers.aliasToBean(Class.class);
我得到了这个:
List<Date> = { '10/10/2014 00:00' , '10/10/2014 00:00' }
我想要的是:
List<Date> = { '10/10/2014 06:45:00' , '10/10/2014 13:30:00' }
应用程序正在使用Oracle连接执行类似操作,并且成功返回时间。唯一的变量是我的连接是SQL Server数据库。有谁知道如何防止时间被丢弃?
更新:
根据选定的答案,并且由于评论未正确显示,因此修复此问题如下:
Query query = session.createSQLQuery("SELECT Start_time FROM table")
.addScalar("Start_time", Hibernate.TIMESTAMP)
.setResultTransformer(Transformers.aliasToBean(Class.class);
答案 0 :(得分:3)
尝试使用时间戳
<property name="start_dt" type="timestamp">
<column name="Start_time"/>
</property>
ANSI SQL DATE不包含时间
映射类型:日期
Java类型:java.util.Date或java.sql.Date
ANSI SQL类型:DATE
映射类型:时间戳
Java类型:java.util.Date或java.sql.Timestamp
ANSI SQL类型:TIMESTAMP