我在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 如何随着时间的推移得到它?
答案 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;