Pregunta

Saludos Estoy desarrollando una aplicación no Weblica usando Spring+Hibernate. Mi pregunta es cómo el Hibernadaosupport maneja la carga perezosa, porque después de una llamada Do Dao, la sesión está cerrada.

Eche un vistazo al siguiente código de psedo:

Dao es como:

CommonDao extends HibernateDaoSupport{
 Family getFamilyById(String id);
 SubFamily getSubFamily(String familyid,String subfamilyid);
}

El modelo de dominio es como:

Family{
 private List<SubFamily> subfamiles;
 public List<SubFamily> getSubFamiles();
}

SubFamily{
 private Family family; 
 public Family getFamily();
}

En la aplicación obtengo DAO de App-Context y quiero seguir las operaciones. Es posible hacer esto con la carga perezosa porque AFAIK después de cada método (getFamilyById (), getSubFamily ()) La sesión está cerrada.

CommonDAO dao=//get bean from application context;
Family famA=dao.getFamilyById(familyid);
//
//Do some stuff
List<SubFamily> childrenA=fam.getSubFamiles();

SubFamily asubfamily=dao.getSubFamily(id,subfamilyid);
//
//Do some other stuff
Family famB=asubfamily.getFamily();
¿Fue útil?

Solución

Mi pregunta es cómo el Hibernadaosupport maneja la carga perezosa, porque después de una llamada a Dao, la sesión está cerrada.

Los DAO no crean/cierran una sesión para cada llamada, no son responsables de esto y esto generalmente se hace utilizando el "Abra la sesión a la vista"Patrón (Spring proporciona un filtro o un interceptor para esto). Pero esto es para aplicaciones web.

En una aplicación Swing, una solución es usar sesión larga. Tendrá que decidir puntos bien definidos para cerrar la sesión para liberar la memoria. Para aplicaciones pequeñas, esto suele ser sencillo y funcionará. Para las aplicaciones más grandes (es decir, la vida real), la solución correcta es usar una sesión por trama/marco interno/diálogo. Es más difícil de administrar pero se escalará.

Algunos hilos que quizás desees leer:

Otros consejos

ON MUCHO Más tiempo e investigación Parece que este es el comportamiento "normal".El error realmente no importa y se tira lo mejor que puedo decir;Puede que ni siquiera sea un error real en la vida real.Parece que los clientes de la oficina hacen algunas cosas hackish para hacer lo que hacen.

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