Java Дата Hibernate отрезать время - PullRequest
11 голосов
/ 26 февраля 2010

У меня есть столбец типа 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. Как получить это со временем?

Ответы [ 9 ]

10 голосов
/ 12 июля 2013

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

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

@Temporal(TemporalType.TIMESTAMP)
@Column(name="EVENTTIME", columnDefinition="DATE")
private Date eventTime;
4 голосов
/ 26 февраля 2010

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

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

3 голосов
/ 26 марта 2010

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

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

<property name="timeStamp" type="java.util.Date">
    <column name="TIME_STAMP"/>
</property>
2 голосов
/ 08 ноября 2012

Да, он также отлично работает в 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;
}
2 голосов
/ 01 августа 2011

Я тоже сталкивался с этой проблемой в прошлом. Чтобы решить эту проблему, измените отображение спящего режима с:

<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.

0 голосов
/ 12 апреля 2016

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

@Temporal(TemporalType.DATE)
private Date date;

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

@Type(type = "date")
private Date date;
0 голосов
/ 15 октября 2013

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

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

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

Ракеш.

0 голосов
/ 26 февраля 2010

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

0 голосов
/ 26 февраля 2010

Попробуйте это:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...