Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate按日期示例查询_Java_Sql_Hibernate - Fatal编程技术网

Java Hibernate按日期示例查询

Java Hibernate按日期示例查询,java,sql,hibernate,Java,Sql,Hibernate,我使用Hibernate的示例类来查询与示例不匹配的对象。只要我没有冬眠类型的日期,一切都正常。但是,当我的Hibernate类型中有日期时,示例永远不匹配。因为它不是,所以我总是收到不应该出现在查询中的对象 这是我正在执行的代码 Criteria criteria = databaseSession.createCriteria("Person"); criteria.add(Restrictions.not(Example.create(sqlEntity).excludeNone()));

我使用Hibernate的示例类来查询与示例不匹配的对象。只要我没有冬眠类型的日期,一切都正常。但是,当我的Hibernate类型中有日期时,示例永远不匹配。因为它不是,所以我总是收到不应该出现在查询中的对象

这是我正在执行的代码

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文件中注释date属性,查询将按预期工作

<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的日期值和实体中的对象,这些实体由于日期而不应该出现。对这两个对象调用Object.equals返回true。

为什么要使用没有时间的日期来映射包含日期和时间的列?sqlEntity对象具有日期精度,即时间值为00:00:00。这就是sqlEntity对象中提供的全部内容。这也是为什么date属性有一种日期而不是时间戳的原因。这是完全错误的,它们都可以节省时间,时间戳和日期之间的唯一区别是时间戳具有的纳秒。@jbniset-sqlEntity的输入没有完整的日期和时间。此外,来自数据库的Hibernate对象只需要日期部分。数据库的一些客户端可能需要时间。我希望实体是只读的。否则,您将在每次更新此类实体时删除日期的时间部分。示例查询不是此作业的正确工具。从示例中排除date属性,并对date属性使用常规限制。@JMelnik-对象存储时间,但值为00:00:00。我知道这不是一个未知的精度。正如我在最后提到的,Object.equals对于这两个日期返回true。因此,至少在返回时,Hibernate会将时间部分设置为00:00:00。为什么使用没有时间的日期来映射包含日期和时间的列?sqlEntity对象具有日期精度,即时间值为00:00:00。这就是sqlEntity对象中提供的全部内容。这也是为什么date属性有一种日期而不是时间戳的原因。这是完全错误的,它们都可以节省时间,时间戳和日期之间的唯一区别是时间戳具有的纳秒。@jbniset-sqlEntity的输入没有完整的日期和时间。此外,来自数据库的Hibernate对象只需要日期部分。数据库的一些客户端可能需要时间。我希望实体是只读的。否则,您将在每次更新此类实体时删除日期的时间部分。示例查询不是此作业的正确工具。从示例中排除date属性,并对date属性使用常规限制。@JMelnik-对象存储时间,但值为00:00:00。我知道这不是一个未知的精度。正如我在最后提到的,Object.equals对于这两个日期返回true。所以,至少在返回时,Hibernate会将时间部分设置为00:00:00。