Napisałem zapytanie kryteria w klasie usług Grails gdzie oczekują chętny dołączyć do wykonania, oraz w celu uniknięcia leniwe ładowanie obiektów podrzędnych podczas wyświetlania moje wyniki zarówno jako odpowiedź JSON lub w moim GSP. Zapytanie wykonywane zgodnie z oczekiwaniami (ustawienie mojego hibernate.show_sql = true w moim DataSource.groovy widzę kwerendy), ale kiedy przemierzają stowarzyszenie w moim GSP, widzę, że hibernacja jest wykonywanie kolejnych zapytań, jak gdyby były leniwie ładowania stowarzyszenia. Nie jestem przekonany, że tak naprawdę to działa. Nie chcę ustawić leniwy: false w mojej klasie domeny dla tych skojarzeń.Grails Gorm Kryteria Zapytanie Chętni Pobieranie
To zapytanie kryteria:
def market = Market.withCriteria(uniqueResult:true){
idEq(marketId)
fetchMode 'resourceAssignments', FetchMode.JOIN
fetchMode 'resourceAssignments.userRole', FetchMode.JOIN
fetchMode 'resourceAssignments.userRole.role', FetchMode.JOIN
fetchMode 'resourceAssignments.userRole.user', FetchMode.JOIN
resourceAssignments{
userRole{
role{
'in'('name', roleNames)
}
}
}
}
Powyższe zwroty kwerendy bez żadnych problemów. Gdy próbuję uruchomić poniższy kod, chociaż, moim GSP, widzę, że hibernacja jest wydając drugą kwerendę tak, jakby były leniwie ściągam z resourceAssignments:
<g:each in="${market.resourceAssignments}" var="ra">
</g:each>
Próbowałem nawet przesłanianie OpenSessionInViewInterceptor z nr -OP przechwytujący, tworząc pustą WebRequestInterceptor i ustawienie openSessionInViewInterceptor w resources.groovy go używać. Raz zrobiłem, że mogę dostać org.hibernate.LazyInitializationException który wydaje się zweryfikować, co myślałem - że Hibernate lub GORM wciąż próbuje wykonać drugą kwerendę, nawet kiedy już określono, że chcę z niecierpliwością sprowadzić te skojarzenia.
Dzięki Burt. Będziemy używać HQL do czasu naprawienia błędu. Bobby Warner składać błąd w Jira dla tej kwestii dla zainteresowanych: http://jira.grails.org/browse/GRAILS-9829 –
JIRA kwestia wymieniona przez @DavidMalone zostało przeniesione do GitHub https://github.com/ grails/grails-core/issues/2764 –