2009-09-02 7 views
9

Où sont les endroits les plus communs où vous avez obtenu un org.hibernate.LazyInitializationException dans Grails, quelle était la cause et comment avez-vous le résoudre?Grails et l'exception d'initialisation de Hibernate

Je pense que cette exception est très importante pour les novices, donc si vous fournissez plus d'exemples, ce serait génial.

Répondre

10

permet de prendre un exemple:

class Book { 
    String title 
    Author author 
} 

class Author { 
    ... 
} 

Book book = Book.get(1) 

Comme nous le savons, par défaut le mode Fetch est paresseux dans les classes de domaine. Considérant l'exemple ci-dessus, disons que nous obtenons l'objet livre, alors l'objet Book est automatiquement attaché à l'objet de session hibernate i.e. Et après que l'objet domaine se soit détaché de l'objet de session et que nous essayions de récupérer book.author, à ce moment il soulève l'exception d'initialisation Lazy.

La solution est donc, d'avoir soit fetch mode comme désireux ou connectez votre adaptateur 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 en avoir beaucoup plus. Je demande aux autres de partager s'il vous plaît.

+1

Cela fonctionne pour moi vraiment bien, mais c'est fastidieux de le placer partout où c'est nécessaire! – IgniteCoders

+0

@IgniteCoders Amit ne semble pas actif dans SO. Savez-vous quelles sont les causes et les objets à détacher en une seule session? –

+0

@AlexanderSuraphel Je ne sais vraiment pas. Je le place juste quand l'exception monte quelque part – IgniteCoders