发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA
1 2 3 下一页 Go 3

使用Hibernate连接Sqlserver可以用分页功能吗?

2003-09-10 16:23
赞助商链接

如题

好像是不支持的,hibernate把sybase和sqlserver归为一类,使用的是同一个SybaseDialect类,没有实现getLimitString()方法,不知为何?

2003-09-10 16:47

why not?

Hibernate List分页通常情况下采用JDBC2.0 scrollable Result来实现的。

2003-09-10 16:52

可以在所有数据库上实现分页的:
Query q = sess.createQuery("from DomesticCat cat");
q.setFirstResult(20);
q.setMaxResults(10);
List cats = q.list();

Hibernate会自动根据dialect使用不同的方法:
对支持游标的使用游标
对Mysql使用limit ?,?

2003-09-10 17:13

Hibernate 根据Dialect来判断,看Hibernate源码 net.sf.hibernate.dialect.MySQLDialect:


public boolean supportsLimit() {
return true;
}

public String getLimitString(String sql) {
StringBuffer pagingSelect = new StringBuffer(100);
pagingSelect.append(sql);
pagingSelect.append(" limit ?, ?");
return pagingSelect.toString();
}


net.sf.hibernate.dialect.Oracle9Dialect:


public boolean supportsLimit() {
return true;
}

public String getLimitString(String sql) {
StringBuffer pagingSelect = new StringBuffer(100);
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
pagingSelect.append(sql);
pagingSelect.append(
" ) row_ where rownum <= ?) where rownum_ > ?");
return pagingSelect.toString();
}


如果不支持的就采用scrollable resultset

2003-09-10 17:16

补充一句:

在Oracle上采用这种嵌套三层的sql语句来实现分页,我过去曾经在Oracle8i上做过测试,由于嵌套层次太多,效率其实很差。不过听说Oracle9i又优化过,可能性能有提高也说不定,我没用用过9i。找个时间来测一下Oracle分页的效率。

3Go 1 2 3 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com