Sto tentando di utilizzare Hibernate per recuperare circa 100 milioni di righe da una tabella. Ho un oggetto di entità persistente che contiene una raccolta di tasse all'interno (un'altra entità persistente). Dato che I sarà iterare sul risultato e accedere alle tariffe per ogni oggetto, voglio prendere con impazienza le tariffe per evitare il problema n + 1.Eager che recupera le raccolte in Hibernate con ScrollableResults
Vorrei anche dire che voglio unirmi ad un altro tavolo chiamato Provider (mappatura one-to-one ma nessuna chiave esterna). Ho provato:
String query = "select new " + Order.class.getName()
+ "(i, p) from Item i left join fetch i.fees f, Provider p where "
+ "p.factoryId=i.factoryId and p.factoryRef=i.factoryRef";
return session.createQuery(query).scroll();
La mia classe Ordine contiene un campo Provider e un campo Articolo. Ottengo questo errore:
Caused by: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list
Vorrei finire con un elenco a scorrimento dell'ordine che contengono Prodotto (con le tasse con entusiasmo recuperati) e Provider.
Penso che questa risposta sia giusta. Se è così, dovresti essere in grado di far sapere ad Hibernate che stai effettivamente recuperando 'Item's cambiando la query per restituire un' List' piuttosto che costruire un 'Ordine':' seleziona i, p da ... '. Dovrai quindi creare l'ordine manualmente. –