Java Date Hibernate切断时间

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

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

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

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

有了这个,你需要使用java.sql.Timestamp JDBC类型。

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

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

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

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

以下映射适用于我:

    

我过去也遇到过这个问题。 要解决它,请更改您的hibernate映射:

    

    

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

是的它也工作正常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; } 

尝试这个:

 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); 

也许你有这个问题? 确保您拥有最新的JDBC驱动程序,文件名应为ojdbc5.jar。

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

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

请在下面找到示例代码:

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

希望这可以帮助。

拉克什。

也许有点晚了,但在我的情况下,解决方案只是将@Temporal(TemporalType.DATE)添加到我的日期字段。

 @Temporal(TemporalType.DATE) private Date date; 

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

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