Pergunta

Onde estão os lugares mais comuns onde você conseguiu um org.hibernate.LazyInitializationException Em Grails, qual foi a causa e como você a resolveu?

Eu acho que essa exceção surge muito para iniciantes; portanto, se você fornecesse mais exemplos, seria ótimo.

Foi útil?

Solução

Vamos dar um exemplo:

class Book {
  String title
  Author author
}

class Author {
  ...
}

Book book = Book.get(1)

Como sabemos, o modo de busca padrão é preguiçoso nas classes de domínio. Considerando o exemplo acima, digamos que obtemos o objeto do livro, o objeto de livro é anexado ao objeto de sessão de hibernato, ou seja, cache de primeiro nível automaticamente. E depois que o objeto de domínio é destacado do objeto da sessão e, em seguida, tentamos buscar o livro.

Portanto, a solução é, para ter o modo buscar como ansioso ou anexar seu objeto de livro à sessão de hibernar usando o código fornecido abaixo:

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

A descrição dada acima é um dos cenários. Pode haver muito mais. Peço outros que compartilhem.

Outras dicas

Consegui um porque estava verificando se um usuário tivesse permissão para fazer alguma ação com a JSecurity/Shiro em um serviço que não era transacional. No final, tive que definir o serviço como transacional para me livrar da exceção.

Mais informações aqui: http://www.nabble.com/jsecurity-lazyinitializationexception-in-default-dbrealm.ispermitt%28%29-td24939803.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top