本文共 1084 字,大约阅读时间需要 3 分钟。
最近做SDO的 DAS实现,用到了Hibernate的scrollableResult功能,记录下code分析结果,备用:
1)分页功能
Query q = session.createQuery("from Cat as c");
q.setFirstResult(200); q.setMaxResults(100); List l = q.list();分页和ScrollableResult是没有任何关系的,完全在API中体现。org.hbiernate.loader.Loader的第1543行如下:
if ( useLimit ) {
sql = dialect.getLimitString( sql.trim(), //use of trim() here is ugly? useOffset ? getFirstRow(selection) : 0, getMaxOrLimit(selection, dialect) ); }也就是用不同的dialect来做分页。这个是很正常的考虑。难得的是hibenrate对不同数据库的 max值的设置也区别开了: 比如某种数据库的 maxResults表示 最多取多少条记录;而另外的数据库可能表示 最大的记录号。
2)ScrollableResult
在JDBC2.0中是这样定义的:
Statement stmt=con.getStatement("游标类型", "记录更新权限");
游标类型:ResultSet.TYPE_FORWORD_ONLY:只可以向前移动ResultSet.TYPE_SCROLL_INSENSITIVE:可卷动。但是不受其他用户对数据库更改的影响。ResultSet.TYPE_SCROLL_SENSITIVE:可卷动。当其他用户更改数据库时这个记录也会改变。记录更新权限:ResultSet.CONCUR_READ_ONLY,只读ResultSet.CONCUR_UPDATABLE,可更新对于ScrollMode,hibernate默认使用ResultSet.TYPE_SCROLL_INSENSITIVE。当然你可以在API中指定你自己
想要的mode。
对于update priv,hibernate使用ResultSet.CONCUR_READ_ONLY,只读方式。
如果你使用的外部connection,必须在cfg.xml中指定
true当然,不用外部connection的情况下,这个配置与否是没有关系的。
转载地址:http://khaoi.baihongyu.com/