Question

Où sont ce qui a été la cause et comment avez-vous le résoudre? Les endroits les plus communs où vous avez obtenu un org.hibernate.LazyInitializationException dans Grails,

Je pense que cette exception arrive beaucoup pour les débutants, donc si vous souhaitez fournir d'autres exemples, ce serait formidable.

Était-ce utile?

La solution

Prenons un exemple:

class Book {
  String title
  Author author
}

class Author {
  ...
}

Book book = Book.get(1)

Comme nous le savons, par défaut mode de récupération est paresseux dans les classes de domaine. Compte tenu de l'exemple ci-dessus, disons que nous obtenons l'objet livre, puis l'objet livre se joint à l'objet de la session de mise en veille prolongée i.e. cache de premier niveau automatiquement. Et après que l'objet de domaine se détache de l'objet de la session, puis nous essayons de chercher book.author, en ce moment, il soulève l'exception d'initialisation Lazy.

La solution est donc, d'avoir soit mode de récupération comme désireux ou attacher votre objet livre à hiberner session en utilisant le code ci-dessous:

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

La description donnée ci-dessus est l'un des scénario. Il pourrait y avoir beaucoup d'autres. Je demande d'autres de bien vouloir part.

Autres conseils

Je suis un parce que je vérifiais si un utilisateur avait la permission de faire une action avec JSecurity / Shiro dans un service qui n'a pas été transactionnel. En fin de compte, je devais juste mettre le service en transactionnel pour se débarrasser de l'exception.

Plus d'infos ici: http : //www.nabble.com/JSecurity-LazyInitializationException-in-default-DbRealm.isPermitted%28%29-td24939803.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top