2009-09-02 10 views
9

¿Dónde están los lugares más comunes donde ha obtenido org.hibernate.LazyInitializationException en Grails, cuál fue la causa y cómo lo resolvió?Excepción de inicialización diferida de Grails e Hibernate

Creo que esta única excepción es mucho más para los novatos, por lo que si proporcionas más ejemplos, sería genial.

Respuesta

10

Le permite tomar un ejemplo:

class Book { 
    String title 
    Author author 
} 

class Author { 
    ... 
} 

Book book = Book.get(1) 

Como sabemos, por defecto traiga modo es perezoso en las clases de dominio. Teniendo en cuenta el ejemplo anterior, digamos que obtenemos el objeto libro, entonces el objeto Libro se adjunta al objeto de sesión de hibernación, es decir, el primer nivel de caché automáticamente. Y después de que el objeto de dominio se separe del objeto de sesión y luego intentemos buscar book.author, en este momento se lanza la excepción de inicialización Lazy.

Así que la solución es, para tener cualquiera de los modos Explorar como ansiosos o adjuntar el libro objeto de hibernar sesión mediante el código dado a continuación:

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

La descripción anterior es uno de los escenarios. Podría haber muchos más. Solicito a otros que por favor compartan.

+1

Eso me funciona muy bien, pero es tedioso colocarlo donde sea que se necesite. – IgniteCoders

+0

@IgniteCoders Amit no parece estar activo en SO. ¿Sabes qué causas y objetos se separarán en una sesión? –

+0

@AlexanderSuraphel Realmente no lo sé. Solo lo coloco cuando la excepción se levanta en algún lugar – IgniteCoders

Cuestiones relacionadas