Я использую запросы критериев Hibernate 3.2.7.GA для выбора строк из базы данных Oracle Enterprise Edition 10.2.0.4.0 с фильтрацией по полю отметки времени. Данное поле имеет тип java.util.Date
в Java и DATE
в Oracle.
Оказывается , что поле отображается на java.sql.Timestamp
, и Oracle преобразует все строки в TIMESTAMP
перед сравнением с переданным значением, , минуя индекс и тем самым разрушительное представление.
Одним из решений было бы использование sqlRestriction()
в Hibernate вместе с функцией TO_DATE
в Oracle. Это могло бы улучшить производительность, но требует переписывания кода приложения (много запросов).
Так есть ли более элегантное решение? Поскольку Hibernate уже выполняет сопоставление типов, можно ли его настроить для правильной работы?
Обновление: Проблема возникает в различных конфигурациях, но вот один конкретный пример:
- Oracle Enterprise Edition 10.2.0.4.0
- Oracle JDBC Driver 11.1.0.7.0
- Hibernate 3.2.7.GA
- Oracle 10gDialect Hibernate
- Java 1.6.0_16