哥们,虽然我没试过查询时负数的情况,但我觉得这个应该是hibernate最一些手工录入错误的屏蔽。可能是这么设计的,-1,就按照第一页去查,-3就按照第三页去查,这个需要弄的只是在hibernate框架上增加一层判断。我记得以前单独用mysql的limit查询的时候,负数会报错,不知道现在升级后的mysql是否屏蔽了这个问题。
解决方案 »
- slf4j+logback记下来的日志,大家有没有好用的离线分析工具推荐
- java 正在封闭类
- spring+hibernate如何实现用户权限的控制?
- eclipse
- 现在互联网领域最缺的是什么 来者有分哦???
- java 开发过著名项目列表
- 请问:Lucene 如何实现搜索排行榜?
- 初学Ejb3.0遇到的数据源问题
- 超链接不能传递参数,怎么解决啊
- 谁能给我一个艰巨的任务!我给他100分
- 大家一起来研究一下url中加入new Date()参数的一定程度上防止数据缓存的原理
- 100分求System.out.println("123".getBytes()); 为啥数值还会变化 "123".getBytes()到底是什么东西啊
org.hibernate.internal.AbstractQueryImpl 这个类里面
public Query setFirstResult(int firstResult) {
selection.setFirstRow( firstResult);
return this;
} public Query setMaxResults(int maxResults) {
if ( maxResults < 0 ) {
// treat negatives specically as meaning no limit...
selection.setMaxRows( null );
}
else {
selection.setMaxRows( maxResults);
}
return this;
}这个类里面org.hibernate.engine.spi.RowSelectionpublic boolean definesLimits() {
return maxRows != null ||
( firstRow != null && firstRow.intValue() <= 0 );
}最终在这个org.hibernate.engine.query.spi.HQLQueryPlan源码里面方法performList()得到体现boolean hasLimit = queryParameters.getRowSelection() != null &&
queryParameters.getRowSelection().definesLimits();
boolean needsLimit = hasLimit && translators.length > 1;
QueryParameters queryParametersToUse;
if ( needsLimit ) {
LOG.needsLimit();
RowSelection selection = new RowSelection();
selection.setFetchSize( queryParameters.getRowSelection().getFetchSize() );
selection.setTimeout( queryParameters.getRowSelection().getTimeout() );
queryParametersToUse = queryParameters.createCopyUsing( selection );
}
else {
queryParametersToUse = queryParameters;
}大概意思就是index或page只要有一个为null或为负数,表示就查找全部
我这里hibernate是4.X的