Hibernate执行分页查询时报can not execute query

本文记录了将SQL Server数据库迁移至Oracle数据库过程中遇到的问题及解决方法,重点在于解决Hibernate执行分页查询时出现的错误can not execute query。通过在hibernate配置文件中设置方言为OracleDialect,成功解决了该问题。

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

Hibernate执行分页查询时报can not execute query

项目即将接近尾声,此时根据客户需求将数据库sql server2005转为oracle11g 在数据库移植中出现了些问题并最终得到解决,谨以此文记录

u Question:.在hibernate执行分页查询时,oracle执行分页的步骤和SQL SERVER相同,但是无法进行正确查询。

u 后台报错:can not execute query

u 解决方案:

在hibernate.cfg.xml文件中设置hibernate所使用的方言。

<property  name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>

改成:

<property  name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>

即可解决

u 剖析深层原因:

l hibernate 执行分页步骤

先获得session,由session获得Query,再由Query 调用setFirst(),setMax()方法,即可得,hibernate 分页java文件中代码与数据库类型无关.代码如下:

Session session = HibernateUtil.currentSession();

Query query = session.createQuery(hql);

query = query.setFirstResult(firstResult);

query = query.setMaxResults(maxResults);

list = query.list();

因hibernate已经对数据库进行了完好的封闭。但是在执行hql语言时,系统必须明确知道是哪一种数据库,因为不同的数据库分布查询底层实现还是有区别的。

l 不同的数据库分页实现

1. oracle数据库分页

select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow

2. DB2数据库分页

Select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by 列名) as a) where rc between startrow and endrow

3. SQL Server 2000数据库分页

Select top pagesize * from 表名 where 列名 not  in(select top pagesize*page 列名 from  表名 order by 列名) order by 列名

4. SQL Server 2005数据库分页

Select * from (select 列名,row_number() over(order by  列名1) as 别名from 表名) as t where t.列名1>=startrow and t.列名1<=endrow

5. MySQL数据库分页

Select * from 表名 limit startrow,pagesize(Pagesize为每页显示的记录条数)6.PostgreSQL数据库分页Select * from 表名 limit pagesize,offset startrow(Pagesize为每 页显示的记录条数.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值