关于hibernate分页传负值进去的有关问题
关于hibernate分页传负值进去的问题。
这个index 和page 我都传负值为嘛还能查出结果呢 ,查出所有的结果了。啥情况?
index为0 和为1查出的结果是一样的。谢谢。
------解决思路----------------------
这个类里面org.hibernate.engine.spi.RowSelection
最终在这个org.hibernate.engine.query.spi.HQLQueryPlan源码里面方法performList()得到体现
大概意思就是index或page只要有一个为null或为负数,表示就查找全部
我这里hibernate是4.X的
query.setFirstResult(index);
query.setMaxResults(page);
这个index 和page 我都传负值为嘛还能查出结果呢 ,查出所有的结果了。啥情况?
index为0 和为1查出的结果是一样的。谢谢。
------解决思路----------------------
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.RowSelection
public 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的