Подтвердить что ты не робот

Время отключения Java Date Hibernate

У меня есть столбец типа Date в Oracle DB и он содержит дату и время. Но когда я пытаюсь получить данные в Java-приложении, он вернет дату с кучей нулей вместо реального времени. В коде это будет выглядеть так:

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

Если в БД было 26-фев-2010 17:59:16, я получу 26-фев-2010 00:00:00 Как получить его со временем?

4b9b3361

Ответ 1

Я не эксперт в Oracle, но вам, вероятно, понадобится тип столбца DateTime, чтобы получить отметку времени.

С этим вам нужно использовать тип java.sql.Timestamp JDBC.

Ответ 2

Как уже указывалось другими, вам нужно использовать java.sql.Timestamp, чтобы получить время.

Однако, если вы используете аннотацию @Temporal(TemporalType.TIMESTAMP) в столбце Oracle DATE, Hibernate будет жаловаться и выдавать ошибки проверки схемы. Чтобы этого избежать, добавьте columnDefinition следующим образом:

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

Ответ 3

У меня была та же проблема (тип даты Oracle в базе данных).

Для меня работает следующее отображение:

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

Ответ 4

Я столкнулся с этой проблемой и в прошлом. Чтобы решить эту проблему, измените отображение 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.

Ответ 5

Да, он также работает отлично hibernate 3.3, используйте ojdbc6.jar и в аннотации измените дату на timestamp как ниже

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

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

Ответ 6

Попробуйте следующее:

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

Ответ 7

Возможно, у вас есть эта проблема? Удостоверьтесь, что у вас есть последний драйвер JDBC, имя файла должно быть ojdbc5.jar.

Ответ 8

В последнее время я столкнулся с той же проблемой. Вот мой подход...

Итак, в этом случае определите для цикла в классе QueryImplementation, чтобы он проверял тип всех столбцов таблицы базы данных. Если имя столбца имеет тип DATE, добавьте addCcalar ( "columnName", новый Timestamptype()) в построитель запросов. Таким образом, столбцы типа Date будут отображать TimeStamp в приложении 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);
       }
   }

Надеюсь, что это поможет.

Ракеш.

Ответ 9

Возможно, немного поздно, но в моем случае решение было просто добавить @Temporal (TemporalType.DATE) в поле даты.

@Temporal(TemporalType.DATE)
private Date date;

И другое решение, которое мы нашли (когда первый не работал), заключалось в том, чтобы явно указать спящий режим Type:

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