Hibernate: как я могу получить свои объекты из ScrollableResults? - PullRequest
5 голосов
/ 12 ноября 2009

Я делаю запрос, который возвращает список объектов. Как я могу получить объекты из ScrollableResults:

 Session s  = ....;
 Query q = s.createQuery("....") # returns 100000s rows
 ScrollableResults sr = q.scroll();
 sr.scroll(45999); # just a number
 Employee employee = ???

Как получить работника в последней строке кода

Ответы [ 4 ]

6 голосов
/ 12 ноября 2009

попробуйте метод get(0) или get()[0]

2 голосов
/ 12 ноября 2009

Вот ссылка на API: ScrollableResults

get() возвращает всю текущую строку, get(index) возвращает объект в позиции index без инициализации остальных. Есть также несколько удобных методов getXXX (), которые приводят результат к заданному типу.

0 голосов
/ 18 июня 2015

Для извлечения сущностей самым простым способом было бы привести объект к любому объекту, который вы хотите: Например:

ScrollableResults sr = q.scroll();
while (sr.next()) {
    CustomObject object = (CustomObject) sr.get()[0]; // Now CustomObject will have all the properties mapped
}

Это прекрасно работает для всех сценариев.

0 голосов
/ 24 сентября 2014

Просто чтобы улучшить другие ответы, 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];
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...