Hibernate5+sqlserver2008 分页问题

在使用Spring4+Hibernate5进行分页操作时遇到错误,经过排查发现是由于数据库方言设置不当导致。调整方言配置后问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



Hibernate 发布了最新版本 5.2,恰好公司要做个新项目,我是比较喜欢冒险的,所有决定采用 spring4+Hibernate5,各种搜索,各种配置之后,框架终于跑起来了,当测试到分页的时候出现了一个很意外的错误,下面详细描述下错误的过程

1、分页代码

public  List<Map<String,Object>> findByPageMap(final String hql, final Object[] params,
   final int pageNo, final int maxResults)
   throws Exception{
  Query queryObject = getSession().createQuery(hql);
  if (pageNo<1)
   throw new Exception("pageNo 必须大于 0");
  int firstResult=(pageNo-1)*maxResults;
  if (params != null) {
   for (int i = 0; i < params.length; i++) {
    queryObject.setParameter(i, params[i]);
   }
  }
  queryObject.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
  queryObject.setFirstResult(firstResult); 
  queryObject.setMaxResults(maxResults); 
  return  (List<Map<String,Object>>)queryObject.list();
 }

很简单不必解释

(ps:原本使用Hibernate5.2 的,因为5.2有一些被取消的的方法例如setResultTransformer()我没找到替代的方法,所以放弃)

运行test测试,出现了一个很诡异的错误

ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper:131 - '@P0' 附近有语法错误。

输出的sql语句为 select        TOP ?  ticketsell0_.detail_id as detail_i1_1 from     TicketSell_detail ticketsell0_

以前从来没出现这个现象,

检查代码 没有可改之处

于是各种替换排除  把 阿里数据源换成c3p0  Hibernate5.2 降级 5.1  现象依旧

度娘也没有给出答案,最后目光放在了数据方言上

原来这么写的

hibernate.dialect=org.hibernate.dialect.SQLServerDialect

换框架之前 一直好使的,在翻看了源码后 发现Hibernate对sqlserver的版本进行了细化

于是改成

hibernate.dialect=org.hibernate.dialect.SQLServer2008Dialect


测试通过

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iceheartboy2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值