Пока вы находитесь в транзакции, все время существует открытый сеанс, и коллекции, загруженные с отложенной загрузкой, смогут разрешаться при обращении к ним.Но вы просто возвращаете неинициализированную коллекцию, и как только она возвращается в контроллер, она отключается от сеанса Hibernate, который ее загрузил.
Так что вам просто нужно инициализировать коллекцию, и есть несколько вариантов.Одним из них является вызов метода size()
:
Set<Furniture> getFurniture(Long idHouse) {
def furniture = MyHouse.get(idHouse).furniture
furniture.size() // force eager init
furniture
}
Это заставит Hibernate перейти в базу данных и заполнить коллекцию.Это зависит от побочного эффекта, хотя - лучший способ позвонить Hibernate.initialize()
:
import org.hibernate.Hibernate
...
Set<Furniture> getFurniture(Long idHouse) {
def furniture = MyHouse.get(idHouse).furniture
Hibernate.initialize furniture
furniture
}