我有一个使用休眠映射在SQL Server数据库表中的多个DATETIME列上执行选择的应用程序.休眠映射使用此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:
休眠列映射:
.
.
<property name="start_dt" type="java.util.Date">
<column name="Start_time"/>
</property>
.
我将其映射到具有正确的getter / setter的date对象,并且我的查询执行如下所示:
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);
解决方法:
尝试使用时间戳
<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