Pergunta

Saudações, estou desenvolvendo uma aplicação não web usando Spring+Hibernate.Minha dúvida é como o HibernateDaoSupport lida com o lazy-loading, pois após uma chamada do DAO, a Session é fechada.

Dê uma olhada no seguinte psuedo-código:

DAO é como:

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

O modelo de domínio é como:

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

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

No aplicativo, obtenho DAO do contexto do aplicativo e desejo seguir as operações. Isso é possível com carregamento lento porque AFAIK após cada método (getFamilyById() , getSubFamily() ) a sessão é fechada.

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();
Foi útil?

Solução

Minha dúvida é como o HibernateDaoSupport lida com o carregamento lento, pois após uma chamada ao DAO, a Sessão é fechada.

Os DAOs não criam/fecham uma Sessão para cada chamada, eles não são responsáveis ​​por isso e isso geralmente é feito usando o "Abrir sessão na visualização"padrão (o Spring fornece um filtro ou interceptador para isso).Mas isso é para aplicativos da web.

Em um aplicativo swing, uma solução é usar sessão longa.Você terá que decidir pontos bem definidos para fechar a sessão para liberar memória.Para aplicações pequenas, isso geralmente é simples e funcionará.Para maiores (ou seja,aplicativos da vida real), a solução certa é usar uma sessão por quadro/quadro interno/caixa de diálogo.É mais difícil de gerenciar, mas será escalonado.

Alguns tópicos que você pode querer ler:

Outras dicas

Em muito mais tempo e investigação, parece que este é um comportamento "normal".O erro não importa realmente e é jogado fora do melhor que posso dizer;Pode nem ser um erro real em vida real.Parece que os clientes do escritório fazem algumas coisas hackes para fazer o que fazem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top