我正在使用Hibernate的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
如果我从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的时间。
如何在日期时间列上以毫秒精度执行此示例查询?
顺便说一下,我调试了sqlEntity
的日期值以及entities
中由于日期而不应该出现的对象的日期值。在这两个对象上调用Object.equals()
将返回true
。