我执行一个返回实体列表的查询。如何从ScrollableResults
:
Session s = ....;
Query q = s.createQuery("....") # returns 100000s rows
ScrollableResults sr = q.scroll();
sr.scroll(45999); # just a number
Employee employee = ???
如何在最后一行代码中找到一名员工
答案 0 :(得分:6)
尝试get(0)
方法或get()[0]
答案 1 :(得分:2)
以下是API的链接:ScrollableResults
get()
返回整个当前行,get(index)
返回index
位置的对象,而不初始化其余行。还有一些方便的getXXX()方法可以将结果转换为给定的类型。
答案 2 :(得分:0)
为了改进其他答案,ScrollableResults
为您进行了实体转换,尽管Javadocs并未立即清楚这一点。
正如@Bozho所说,调用sr.get()
将返回当前位置的实体,但包含在数组中。在查看ScrollableResultsImpl
的代码时,当前行的结果设置为:
if ( result != null && result.getClass().isArray() ) {
currentRow = (Object[]) result;
} else {
currentRow = new Object[] { result };
}
所以ScrollableResults.get()
总是返回一个结果数组,如果你的实体不一个数组,它将在get()[0]
。
因此,使用您的代码,您可以执行以下操作:
while (sr.next()) {
// get the entity which is the first element in an Object[]
Employee employee = sr.get()[0];
...
}
答案 3 :(得分:0)
要检索实体,最简单的方法是将对象强制转换为您想要的对象: E.g:
ScrollableResults sr = q.scroll();
while (sr.next()) {
CustomObject object = (CustomObject) sr.get()[0]; // Now CustomObject will have all the properties mapped
}
这适用于所有场景。