Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日期休眠截止时间_Java_Oracle_Hibernate_Date_Time - Fatal编程技术网

Java日期休眠截止时间

Java日期休眠截止时间,java,oracle,hibernate,date,time,Java,Oracle,Hibernate,Date,Time,我在Oracle DB中有一个日期类型列,它肯定包含日期和时间。但当我试图在java应用程序中获取数据时,它将返回带有一堆零的日期,而不是实时数据。 在代码中,它将类似于: SQLQuery sqlQuery = session.createSQLQuery("SELECT table.id, table.date FROM table"); List<Object[]> resultArray = sqlQuery.list(); Date date = (Date)resultA

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

SQLQuery sqlQuery = session.createSQLQuery("SELECT table.id, table.date FROM table");
List<Object[]> resultArray = sqlQuery.list();
Date date = (Date)resultArray[1];
SQLQuery SQLQuery=session.createSQLQuery(“从表中选择table.id、table.date”);
List resultArray=sqlQuery.List();
日期日期=(日期)结果数组[1];
如果是2010年2月26日17:59:16分贝,我会得到2010年2月26日00:00:00
如何利用时间获取它?

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

因此,您需要使用
java.sql.Timestamp
JDBC类型。

尝试以下方法:

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。

我也有同样的问题(数据库中的Oracle日期类型)

以下映射适用于我:

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

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

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



您可以将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;
}

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

但是,如果在Oracle的日期列上使用
@Temporal(TemporalType.TIMESTAMP)
注释,Hibernate将抱怨并抛出模式验证错误。要避免这些情况,请添加一个
列定义,如下所示:

@Temporal(TemporalType.TIMESTAMP)
@列(name=“EVENTTIME”,columnDefinition=“DATE”)
私人日期事件时间;

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

因此,在本例中,在QueryImplementation类中定义一个for循环,以便它检查数据库表中所有列的类型。如果列名的类型为DATE,则将addScalar(“columnName”,new Timestamptype())附加到查询生成器中。这样,日期类型列将在java应用程序中显示时间戳

请在下面查找示例代码:

 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);
       }
   }
SQLQuery hibernateQuery=getSession().createSQLQuery(SQLQuery);
Set columns=columnDataTypes.keySet();
for(字符串列:列){
if(columnDataTypes.get(column).equals(SqlType.DATE.name())){
addScalar(列,new TimestampType());
}否则{
hibernateQuery.addScalar(列);
}
}
希望这有帮助


Rakesh.

可能有点晚,但在我的例子中,解决方案是只在我的日期字段中添加@Temporal(TemporalType.DATE)

@Temporal(TemporalType.DATE)
private Date date;
我们发现的另一个解决方案(当第一个不起作用时)是显式地告诉hibernate类型:

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

在Oracle中,
DATE
数据类型包含日期和时间信息,非常类似于
java.lang.DATE
。谢谢。现在它起作用了。但我讨厌这样一个事实:我应该为所有返回的参数定义类型。我有很多…你可以试试一种习惯方言。基本方言表示“注册hibernate类型以在scalar sqlquery类型自动检测中默认使用”,并将types.DATE与hibernate.DATE匹配-您可以将其子类化,并将types.DATE与hibernate.TIMESTAMP匹配。我无法对此进行足够的升级!这应该是公认的答案!
@Type(type = "date")
private Date date;