首页 > 解决方案 > Hibernate HQL 查询错误:将 varchar 数据类型转换为 smalldatetime

问题描述

我尝试从 Hibernate HQL 查询中获取结果:

从 StopsRegister s where s.startTime>='2018-04-25 07:59:00.0' and s.endTime<='2018-04-26 07:59:00.0'

来自 StopsRegister s,其中 s.startTime 在 '2018-04-25 08:42:00' 和 '2018-04-26 08:42:00' 之间

当添加第二个日期时,问题就开始了:并且 s.endTime<='2018-04-26 07:59:00.0' 只有一个值,一切正常。

但得到 SQL 错误:

将 varchar 数据类型转换为 smalldatetime 数据类型导致值超出范围。

这就是我获取日期值的方式:

Timestamp.valueOf(LocalDateTime.of(toDatePicker.getDate(), toTimePicker.getTime()));

数据类型为:java.sql.Timestamp;数据库:MS SQL Server。

在我看来,日期格式是正确的,我不明白这个错误。

标签: sql-serverhibernatehql

解决方案


这解决了这个问题:

Session session = HibernateUtil.getSessionFactory().openSession();
        Query q = session.createQuery("from StopsRegister s where s.startTime >= :from and s.startTime <= :to");
        q.setTimestamp("from", from);
        q.setTimestamp("to", to);
        stopRegisterList = (ArrayList<StopsRegister>) q.list();

推荐阅读