Pregunta

¿Dónde están los lugares más comunes donde se ha conseguido una org.hibernate.LazyInitializationException en Grails, ¿cuál fue la causa y cómo resolverlo?

Creo que esta única excepción aparece mucho para el principiante, así que si proporciona más ejemplos, sería genial.

¿Fue útil?

Solución

Permite tomar un ejemplo:

class Book {
  String title
  Author author
}

class Author {
  ...
}

Book book = Book.get(1)

Como sabemos, el modo por defecto de captación es perezoso en las clases de dominio. Teniendo en cuenta el ejemplo anterior, decimos que obtenemos el objeto libro, entonces objeto libro se apega al objeto de sesión de hibernación es decir primero la memoria caché de nivel automáticamente. Y después de que el objeto de dominio se separa del objeto de sesión y luego tratamos a buscar book.author, en este momento se plantea la excepción de inicialización perezosa.

Así que la solución es, a tener ya sea el modo de alcanzar un precio 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 dada anteriormente es uno de los escenarios. Podría haber muchos más. Solicito otros a favor comparta.

Otros consejos

Tengo uno porque yo estaba revisando si un usuario tiene permiso para hacer alguna acción con JSecurity / Shiro en un servicio que no era transaccional. Al final sólo tenía que establecer el servicio como transaccional para deshacerse de la excepción.

Más información aquí: http : //www.nabble.com/JSecurity-LazyInitializationException-in-default-DbRealm.isPermitted%28%29-td24939803.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top