sql-server - 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。
在我看来,日期格式是正确的,我不明白这个错误。
解决方案
这解决了这个问题:
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();
推荐阅读
- javascript - 具有不透明度的 Amcharts 网格颜色
- java - wsdl2java 生成列表
> 而不是属性 - c++ - 不可预测的复制省略?
- python - 将 3D 数组拆分为固定维度的较小块的 Pythonic 方法
- android - 当我尝试更改活动时,我的 android 应用程序崩溃了
- android - JSON 数组到数据模型
- pandas - 为 Pandas 数据框单元格中的列表元素编写 if 语句
- javascript - 无法匹配 mongodb 聚合中的 objectId 数组
- flutter - 颤振:无法从pdf文件打开特定页面
- c++ - MinGW 32/64 不能编译为 32 位