Критерии гибернации для поиска по временному диапазону в поле Дата - PullRequest
1 голос
/ 01 февраля 2012

Я использую Oracle 10g, Hibernate 3, springMVC, jqgrid. У меня есть некоторые Дата полей в ORACLE, которые отображаются следующим образом

@Temporal(TemporalType.DATE)
@Column(name = "DOC_CREATION_DATE", length = 7,insertable=true,updatable=false)
public Date getDocCreationDate() {
    return this.docCreationDate;
}

В моей сетке я фильтрую дату, используя jqueryCalendar, и все в порядке. сейчас У меня есть новый запрос от клиента, который должен показать время documentCreation , и они также хотят иметь возможность фильтрации по временному диапазону.например:

найти все записи, созданные в период с 6:00 до 19:00, найти все записи, созданные в 6: 00.

Я уже пытался отформатировать датуполе с

@Temporal(TemporalType.TIMESTAMP)

и это не то, что они хотят

Есть ли какой-либо другой подход к этой проблеме, любые хорошие идеи, как реализовать это, очень приветствуются.

дело в том, что мне нужно использовать одно и то же сопоставленное поле для запроса в одном столбце Jqgrid на обычную дату ( 12/01/2012 с использованием jqueryCalendar) и добавить еще один столбец для временичасть того же сопоставленного поля как только это будет сделано, мне нужно запросить (критерии гибернации) столбец времени для диапазона времени как то так издеваться:

...
 criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart",6AM ));

спасибо за помощь

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Столбец относится к типу, сопоставленному со временем, и поэтому вы должны сравнить его значение со временем:

Time sixAM = Time.valueOf("06:00:00");
criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart", sixAM));

Вы также можете использовать обычную дату:

Date sixAM = new SimpleDateFormat("HH:mm").parse("06:00");
criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart", sixAM));
1 голос
/ 01 февраля 2012

Вы должны изменить аннотацию @Temporal, чтобы использовать либо TemporalType.TIMESTAMP, либо добавить другое поле и добавить к ней аннотацию TemporalType.TIME. Hibernate использует аннотацию @Temporal, чтобы определить, следует ли обрабатывать поле как java.sql.Timestamp или java.util.Date с отключенным временем (установлено в полночь или 00h 00m 00.0s). Это позволяет разработчикам использовать java.util.Date везде в своем приложении и никогда не беспокоиться о классе Timestamp (он изгнан из большей части нашей кодовой базы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...