Grails получает ленивое исключение инициализации в транзакционном сервисе - PullRequest
0 голосов
/ 23 февраля 2011

Я получаю типичное исключение инициализации Lazy в спящем режиме в моей транзакционной службе при доступе к свойству объекта SET.

org.hibernate.LazyInitializationException: could not initialize proxy - no Session


class ProductService {
  static transactional = true
  def xyz() {
    def products = Product.list()
    products.each { product ->
      def category = product.categories.asList().first()
      def title = category.title
    }
  }
}


Я получаю исключениепри доступе к свойству title категории

1 Ответ

2 голосов
/ 23 февраля 2011

xyz - это Closure, вызываемое Groovy, как если бы это был метод, но это не метод. Так что Spring не использует прокси (это просто поле), и вы не получаете транзакционного поведения. Почти никогда нет веской причины иметь закрытое закрытие в классе Service (внутреннее закрытие утилит вполне подойдет).

Это должно работать:

void xyz() {
   for (product in Product.list()) {
       def category = product.categories.asList().first()
       def title = category.title
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...