Вопрос

Где чаще всего вы получаете org.hibernate.LazyInitializationException в Grails, в чем была причина и как вы ее решили?

Я думаю, что это единственное исключение часто встречается у новичков, поэтому, если бы вы предоставили больше примеров, было бы здорово.

Это было полезно?

Решение

Возьмем пример:

class Book {
  String title
  Author author
}

class Author {
  ...
}

Book book = Book.get(1)

Как мы знаем, режим выборки по умолчанию в доменных классах является ленивым.Учитывая приведенный выше пример, скажем, мы получаем объект книги, затем объект книги автоматически прикрепляется к объекту сеанса гибернации, то есть к кэшу первого уровня.И после того, как объект домена отделяется от объекта сеанса, а затем мы пытаемся получить book.author, в этот момент он вызывает исключение отложенной инициализации.

Таким образом, решение состоит в том, чтобы либо использовать режим выборки в режиме ожидания, либо прикрепить объект книги к сеансу гибернации, используя код, приведенный ниже:

if(!book.isAttached()){
     book.attach()
}

Приведенное выше описание является одним из сценариев.Их может быть еще много.Я прошу других поделиться.

Другие советы

Я получил его, потому что проверял, есть ли у пользователя разрешение на выполнение каких-либо действий с JSecurity/Shiro в службе, которая не является транзакционной.В конце концов мне просто пришлось настроить службу как транзакционную, чтобы избавиться от исключения.

Дополнительная информация здесь: http://www.nabble.com/JSecurity-LazyInitializationException-in-default-DbRealm.isPermited%28%29-td24939803.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top