如何防止hibernate从datetimes中删除时间?

时间:2014-10-31 14:00:02

标签: java sql hibernate struts hibernate-mapping

我有一个使用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);

1 个答案:

答案 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