2014-10-31 64 views
1

我有一个应用程序使用休眠映射来执行SQL Server数据库表中的多个DATETIME列的选择。 hibernate映射使用此DATETIME并将其转换为应用程序中的java.util.Date对象。如何防止hibernate从日期时间中删除时间?

Database table 

Start_time | datetime 

10-OCT-2014 06:45:00 
10-OCT-2014 13:30:00 

的问题是,存储在数据库中的日期时间字段的时间被丢弃/截断,并每次约会与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数据库。有谁知道如何防止时间被丢弃?

UPDATE:

根据所选答案bleow因为注释显示不正确此修复程序如下:

Query query = session.createSQLQuery("SELECT Start_time FROM table") 
    .addScalar("Start_time", Hibernate.TIMESTAMP) 
    .setResultTransformer(Transformers.aliasToBean(Class.class); 
+0

情境代码不是从应用程序中获取,而是通用来解释情况。此外,Oracle进程映射到DATE数据类型的列,并且按预期工作。 – JBMac 2014-10-31 14:13:13

回答

1

尝试使用时间戳

<property name="start_dt" type="timestamp"> 
    <column name="Start_time"/> 
</property> 

ANSI SQL日期不包含时间

映射类型:日期
Java类型:java.util.Date或java.sql.Date
ANSI SQL类型:DATE

映射类型:时间戳
Java类型:java.util.Date或java.sql.Timestamp中
ANSI SQL类型:TIMESTAMP

+0

不,这不工作,或者我只是做了配置更改并运行它,它仍然返回截断时间的日期 – JBMac 2014-10-31 15:04:50

+0

我的解决方案是对TIMESTAMP进行强制转换,但不在您建议的位置。在查询执行中设置标量时的正确位置。使用上面的示例解决方案是: Query query = session.createSQLQuery(“SELECT Start_time FROM table”) .addScalar(“Start_time”,Hibernate.TIMESTAMP) .setResultTransformer(Transformers.aliasToBean(Class.class); – JBMac 2014-10-31 17:48:41