【发布时间】:2014-12-27 21:09:54
【问题描述】:
我有一个应用程序使用休眠映射对 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 字段中的时间被删除/截断,并且当休眠将它们带入应用程序时,每个日期都以 00:00 的时间返回:
Hibernate 列映射:
.
.
<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);
【问题讨论】:
-
情况代码并非取自应用程序,而是用于解释情况的通用代码。此外,Oracle 进程映射到 DATE 数据类型的列,它按预期工作。
标签: java sql hibernate struts hibernate-mapping