Используя HQL для запросов в дату при игнорировании времени на Oracle

Вы можете передать дополнительные атрибуты HTML методу TextBoxFor :

@Html.TextBoxFor(m => m.Foo, new { autofocus="autofocus"})

Редактировать:
Вы можете получить только autofocus="" с:

@Html.TextBoxFor(m => m.Foo, new { autofocus=""})

Все встроенные помощники внутренне используют метод MergeAttribute класса TagBuilder , и он поддерживает атрибуты только в следующем формате: key="value".
Так что, если вам нужно только autofocus, вам нужно написать свой собственный помощник с собственным HTML-компоновщиком.

15
задан Tomasz Nurkiewicz 16 November 2011 в 08:09
поделиться

3 ответа

Вы можете поместить два ограничения в свой HQL, одно, которое задает больше или равно началу даты, в которую вы выполняете поиск, и одно, которое указывает меньше, чем на следующий день.

т.е.

table.date >=11.06.2009 AND table.date < 11.07.2009

HQL (а также SQL) также допускает:

table.date between 11.06.2009 AND 11.07.2009

Имейте в виду, что между всегда включающее, то есть оба > = и <= соответственно.
Подробнее о между здесь: http://www.coding-dude.com/wp/java/hibernate-java/hibernate-hql-between-expression/

15
ответ дан 1 December 2019 в 04:01
поделиться

Я думаю, что есть два способа решить эту проблему:

  1. Используйте критерий и добавьте запрос SQLRestriction . Ограничение могло бы иметь форму «trim ({alias} .date) =?». Проблемой здесь может быть преобразование входного параметра в правильный тип в Oracle (или другой СУБД). Вы можете указать необходимый тип (спящий режим) в качестве параметра, но если он зависит от базы данных, он будет жестко закодирован.

  2. используйте формулу в вашем отображении гибернации. Сопоставление будет следующим:

    <class name="Person">
      <property name="birthDay" formula="trim(birthDay)"/>
    </class>

Теперь вы можете использовать систему ввода Hibernate для сравнения с java-объектом следующим образом:

s.createCriteria(Person.class)
 .add(Restrictions.eq("birthDay", new java.sql.Date(System.currentTimeMillis())))
 .list()

Одна проблема, с которой вы столкнетесь с обоими решениями, - это функция trim , которая может не работать быть доступным в базе данных. Решение для этого (например, во время тестирования на HSQLDB) заключается в том, чтобы поместить import.sql в ваш тест пути к классам (он будет автоматически выбран Hibernate) и создать там процедуру или функцию. Вы также можете Изменить таблицу Человек добавить метку времени дня рождения столбца в этот файл, чтобы сгенерированная схема работала.

2
ответ дан 1 December 2019 в 04:01
поделиться

вы можете использовать функцию trunc (), чтобы удалить часть времени в DATE столбец.

например: select * from emp, где trunc (emp_date)

извлекает все данные о сотрудниках, которые работали за 1 месяц до

-1
ответ дан 1 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: