Java Date Hibernate切断时间

时间:2010-02-26 17:02:15

标签: java oracle hibernate date time

我在Oracle DB中有一个Date类型列,它包含日期和时间。但是当我试图在java应用程序中获取数据时,它将返回带有一堆零而不是实时的日期。 在代码中,它将像:

SQLQuery sqlQuery = session.createSQLQuery("SELECT table.id, table.date FROM table");
List<Object[]> resultArray = sqlQuery.list();
Date date = (Date)resultArray[1];

如果是26-feb-2010 17:59:16在DB我会得到26-feb-2010 00:00:00 如何随着时间的推移得到它?

9 个答案:

答案 0 :(得分:10)

正如其他人已经说过的那样,您需要使用java.sql.Timestamp来获取时间。

但是,如果在Oracle的DATE列上使用@Temporal(TemporalType.TIMESTAMP)注释,Hibernate会抱怨并抛出架构验证错误。要避免这些,请添加columnDefinition,如下所示:

@Temporal(TemporalType.TIMESTAMP)
@Column(name="EVENTTIME", columnDefinition="DATE")
private Date eventTime;

答案 1 :(得分:4)

我不是Oracle专家,但您可能需要DateTime列类型才能获得时间戳。

这样你需要使用java.sql.Timestamp JDBC类型。

答案 2 :(得分:3)

我遇到了同样的问题(数据库中的Oracle Date类型)。

以下映射适用于我:

<property name="timeStamp" type="java.util.Date">
    <column name="TIME_STAMP"/>
</property>

答案 3 :(得分:2)

我过去也遇到过这个问题。要解决此问题,请从以下位置更改hibernate映射:

<property name="timeStamp" type="java.util.Date">
    <column name="TIME_STAMP"/>
</property>

<property name="timeStamp" type="timestamp">
    <column name="TIME_STAMP"/>
</property>

您可以将数据类型保留在Hibernate对象中作为java.util.Date。

答案 4 :(得分:2)

是的,它也工作正常hibernate 3.3,使用ojdbc6.jar并在注释中将日期更改为时间戳 如下所示

@Id
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "TDATE", length = 7)
public Date getTdate() {
    return this.tdate;
}

public void setTdate(Date tdate) {
    this.tdate = tdate;
}

答案 5 :(得分:0)

试试这个:

session.createSQLQuery("SELECT table.id as i, table.date as d FROM table")
  .addScalar("i", Hibernate.LONG)  // Or whatever type id is
  .addScalar("d", Hibernate.TIMESTAMP);

答案 6 :(得分:0)

也许你有this problem?确保你有最新的JDBC驱动程序,文件名应该是ojdbc5.jar。

答案 7 :(得分:0)

我最近遇到了同样的问题。这是我的方法......

因此,在这种情况下,在QueryImplementation类中定义 for循环,以便检查数据库表的所有列的类型。如果列名是DATE类型,则将addScalar(“columnName”,new Timestamptype())附加到查询构建器。通过这种方式,Date类型列将在java应用程序中显示TimeStamp。

请在下面找到示例代码:

 SQLQuery hibernateQuery = getSession().createSQLQuery(sqlQuery);

        Set<String> columns = columnDataTypes.keySet();
   for (String column : columns) {
       if (columnDataTypes.get(column).equals(SqlType.DATE.name())) {
           hibernateQuery.addScalar(column, new TimestampType());
       } else {
           hibernateQuery.addScalar(column);
       }
   }

希望这有帮助。

勒凯什。

答案 8 :(得分:0)

也许有点晚了,但就我而言,解决办法就是将@Temporal(TemporalType.DATE)添加到我的日期字段中。

@Temporal(TemporalType.DATE)
private Date date;

我们发现的另一个解决方案(当第一个不起作用时)是明确告诉hibernate类型:

@Type(type = "date")
private Date date;