【问题标题】:How do I prevent hibernate from dropping times from datetimes?如何防止休眠从日期时间中删除时间?
【发布时间】: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


【解决方案1】:

尝试使用时间戳

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

ANSI SQL DATE 不包含时间

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

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

【讨论】:

  • 不,这也不起作用,我只是更改了配置并运行它,它仍然返回截断时间的日期
  • 我的解决方案是对 TIMESTAMP 进行强制转换,但不在您建议的位置。在查询执行中设置标量时的正确位置。使用上面的示例,解决方案是: Query query = session.createSQLQuery("SELECT Start_time FROM table") .addScalar("Start_time", Hibernate.TIMESTAMP) .setResultTransformer(Transformers.aliasToBean(Class.class);
猜你喜欢
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2012-11-23
  • 2020-01-23
  • 2019-07-05
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
相关资源
最近更新 更多