You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate使用DetachedCriteria分页查询SQL Server报as附近语法错误

解决方案

你遇到的是Hibernate 4版本针对SQL Server生成带分页的Criteria查询时,SQL字符串拼接截断的已知bug,可按以下优先级尝试修复:

  • 修正Hibernate方言配置
    检查项目中Hibernate的方言配置,确认和你使用的SQL Server版本匹配:
    如果你使用SQL Server 2008及以上版本,将方言改为org.hibernate.dialect.SQLServer2008Dialect,不要使用旧的SQLServerDialect(针对SQL Server 2000设计,分页逻辑存在兼容性问题)。
  • 给Criteria添加显式排序规则
    你当前的查询没有配置排序条件,Hibernate默认生成ORDER BY CURRENT_TIMESTAMP作为排序逻辑,这是触发拼接bug的常见条件。你可以手动给查询增加合法排序,比如按主键排序:
    criteria.addOrder(Order.asc("cid"));
    
    加入显式排序后,Hibernate生成分页SQL时就不会触发默认CURRENT_TIMESTAMP排序对应的拼接逻辑,即可避免截断错误。
  • 升级Hibernate 4的小版本
    如果你使用的是Hibernate 4.1/4.2的早期版本,这类Criteria分页拼接bug已经在后续维护版本中修复,你可以升级到Hibernate 4.3.x的最终稳定版本,即可原生解决该问题。
  • 临时兼容方案
    如果暂时无法修改版本和方言,可以先查询符合条件的主键集合,再对主键集合做内存分页后查询对应实体,或者改用原生SQL实现分页查询,避开DetachedCriteria的分页逻辑。

内容的提问来源于stack exchange,提问作者arunken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:24:05