Я использую класс Example
Hibernate для запроса объектов, которые не соответствуют примеру. Все работает нормально, пока у меня нет даты в моем спящем типе. Однако, когда у меня есть даты в моем типе Hibernate, Example
никогда не совпадает. (Поскольку это не так, я всегда получаю объекты, которые не должны присутствовать в запросе.)
Это код, который я выполняю
Criteria criteria = databaseSession.createCriteria("Person");
criteria.add(Restrictions.not(Example.create(sqlEntity).excludeNone()));
List entities = criteria.list();
// entities contains more objects than it should
Если я закомментирую свойство date из моего файла hbm.xml, запрос будет работать как положено.
<class entity-name="Person">
...
<!-- This property is causing the Example to not match. -->
<property name="date" type="date">
<column name="Date"/>
</property>
</class>
Объект sqlEntity
имеет точность даты (т. Е. Значение времени равно 00:00:00). Это все, что предусмотрено в объекте sqlEntity
. Именно поэтому свойство date имеет тип даты, а не метку времени. Фактические строки в таблице SQL имеют точность в миллисекундах и время, которое не равно 00: 00: 00.
Как выполнить этот пример запроса с точностью до даты для столбца datetime с точностью до миллисекунды?
Кстати, я отладил значение даты sqlEntity
и объектов из entities
, которые не должны были присутствовать из-за дат. Вызов Object.equals()
для этих двух объектов возвращает true
.