com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: no session

Saludos...

Utilizo hibernate criteria... en el dao.

Criteria criteria = session.createCriteria(Contribuyente.class);
List lst = criteria.list();
return lst;

En el controller Spring :

List lst = icontribuyenteServicio.Pagination(pagination);

for(Contribuyente row : lst){

row.getTipopropietario().setContribuyentes(null);

row.getTipopropietario().setPrediocaracts(null);
row.setRegexoneracions(null);
row.setPredioperiodos(null);
row.setTitulars(null);
//row.setCambiosdatos(null);

row.setTransferenciaorigens(null);
row.setTransferenciadestinos(null);

row.setUsuario(null);

}

Debo hacer un for a la lista para indicar que entidad relacionada cargo y que no, sino me devuelve el error:
para ejemplo comente //row.setCambiosdatos(null);

com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: adicse.sim.model.Contribuyente.cambiosdatos, no session or session was closed (through reference chain: java.util.HashMap["data"]->java.util.ArrayList[0]->adicse.sim.model.Contribuyente["cambiosdatos"])

Como podria hacer para cargar solo lo que necesito ;

for(Contribuyente row : lst){

row.getTipopropietario().setContribuyentes(null);

}

Espero puedan apoyarme.

At.

Carlos Rojas C
peru

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: LazyInitializationException

 

Echa un vistazo a http://stackoverflow.com/a/4378064/870248.

P.D. No olvides comentar si esto te fue de utilidad.

Intente por todo lado y nada

Revise el comentario ,,,,,

Modificar el modelo es algo complicado, ya que mi modelo de datos lo genero con eclipse.... y si modifico mi bd, reemplazo el que tengo y se modificaria la configuracion de lazy y @JsonIgnore si los utilizaria...
ç

Intente con

sessionFilter
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

Tampoco sigue el error..

¿Complicado?

Modificar el modelo es algo complicado...

¿De qué estás hablando? ¿Estás utilizando un control de versiones?


He notado que NetBeans agrega anotaciones de JAXB que eclipse no agrega cuando se generan las entidades a partir de la base de datos.

Por ejemplo, agrega @XmlTransient (que tiene el mismo efecto que @JsonIgnore) en los métodos get de las relaciones @OneToMany o @ManyToMany.

~~~

No funciona...

No funciona el @XmlTransient pero si @JsonIgnore,

Esto significa que mi clase debe ser modificada.... y eso es un problema....

Debe existir alguna forma que en el metodo se pueda inyectar el @jsonIgnore...

como ????

Jackson datatype Hibernate

Si utilizas @JsonIgnore estaras modificando la clase y eso no es muy transparente que digamos, en las versiones mas recientes de jackson existe un modulo llamado Jackson datatype Hibernate y solo es necesario configurarlo, aqui te explico como hacerlo mas a detalle
http://www.ingenieroperales.com/2016/02/23/com-fasterxml-jackson-databin...

Re: «transparente»

 

Cuando mencionas:

... no es muy transparente que digamos ...

¿Qué significa eso de «transparente»? ¿Lo mismo que aparece en el DLE?

~~~

No

Al decir transparente me referia al hecho de que el código se encuentre en el caso de querer enviar en la petición las colecciones que se cargan por lazy load y con esa solución se evitara tener que retrabajar con los @JsonIgnore u otras soluciones, es decir si carga o no las colecciones lazy load eso no importara al enviar la respuesta a la peticón ya que el convertidor las ignorara si son un proxy o las enviara si ya estan cargadas, solo queria evitar escribir toda la decripción tecnica de la comparación con @JsonIgnore, no se si me explique de forma clara.

Re: «transparente»

 

Los informáticos le han dado un significado adicional a la palabra. Por transparente se entiende que los detalles de un programa o software se ocultan al usuario, se hacen invisibles...

De acuerdo con Wikipedia, "la gran mayoría de las veces, el término transparente se utiliza de forma engañosa para referirse a la invisibilidad real de un proceso de computación".

~~~