2009-11-12 4 views
5

Hago una consulta que devuelve una lista de entidades. ¿Cómo puedo recuperar las entidades de un :Hibernate: ¿cómo recupero mis entidades desde un ScrollableResults?

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

¿Cómo consigo un empleado en la última línea de código

Respuesta

6

probar el método de get(0), o get()[0]

2

Aquí hay un enlace a la API: ScrollableResults

get() devuelve toda la fila actual, get(index) rendimientos objeto en index posición sin inicializar el resto de º em. También hay un montón de métodos getXXX() que arrojan resultados al tipo dado.

+1

Esta publicación sería más útil si proporcionó un ejemplo. Por ejemplo, ¿cómo sería la "fila actual completa" si estuviera recibiendo Clientes? Si el Cliente tiene dos campos, nombre e ID, esperaría que [0] sea el nombre y que [1] sea la ID. Pero no es así, consiga [0] es el Cliente por lo que puedo decir. – KyleM

0

Simplemente para mejorar las demás respuestas, realiza la conversión de entidad para usted, aunque esto no se desprende inmediatamente de los Javadocs.

Como dice @Bozho, llamando al sr.get() devolverá la entidad en la ubicación actual, pero envuelta en una matriz. Al analizar el código para ScrollableResultsImpl resultado de la fila actual se establece con:

if (result != null && result.getClass().isArray()) { 
     currentRow = (Object[]) result; 
    } else { 
     currentRow = new Object[] { result }; 
    } 

Así ScrollableResults.get() siempre devuelve un conjunto de resultados y si su entidad es no una matriz, será en get()[0].

Así, con su código que haría algo como:

while (sr.next()) { 
    // get the entity which is the first element in an Object[] 
    Employee employee = sr.get()[0]; 
    ... 
} 
0

Para recuperar entidades la forma más sencilla sería la de convertir el objeto a lo que se opone quiere: Ej:

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

Esto funciona perfecto para todos los escenarios.

Cuestiones relacionadas