Desenvolvi um pequeno sistema para controle de visitas porem ele está apresentando o seguinte problema:
quando eu apago ou adiciono alguma informação a alteração é feita no banco de dados porem a aplicação não é atualizada.
Ex. caso eu apague um vendedor, no banco ele some, porem na aplicação ele ainda é apresentado e só some quando eu fecho o sistema e abro novamente.
Obs. estou utilizando uma classe para controlar os acessos ao banco de dados, para não abrir muitas conexões com o mesmo. e tambem estou utilizando o Hibernate para realizar a persistência.
Percebi que o problema só ocorre onde há o mapeamento one-to-many.
Ex quando eu recupero as visitas de um empresa, se eu adicionar ou remover uma visita a alteração é feita no banco mas não na aplicação, no caso da exclusão, quando eu listo as visitas e tento abrir uma que eu exclui retorna um erro do banco de dados falando que o registro não existe.
Descobri que se eu remover a classe que controla o acesso ao banco de dados, deixando que cada DAO faça isso, este problema é resolvido porem é gerado o problema de LazyInitializationException ao tentar acessar os dados da relação one-to-many, sem falar que ai a aplicação abre diversas sessões com o banco de dados.
[quote=exilado]Descobri que se eu remover a classe que controla o acesso ao banco de dados, deixando que cada DAO faça isso, este problema é resolvido porem é gerado o problema de LazyInitializationException ao tentar acessar os dados da relação one-to-many, sem falar que ai a aplicação abre diversas sessões com o banco de dados.
[/quote] Para o problema de lazy, dê uma olhada aqui: Quatro soluções para LazyInitializationException
Eu ja tinha o conhecimento desse post, pois tive problema de lazy antes e graças a ele eu conssegui resolver, e por isso estou utilizando uma classe para cotrolar o acesso ao BD, ou seja estou utilizando a solução “Open Session in View”, porem acontece oproblema dele não atualizar o lazy quando um item é adicionado ou removido do banco, mas quando eu atualizo algum já existente o lazy tambem é atualizado.
[quote=exilado]Descobri que se eu remover a classe que controla o acesso ao banco de dados, deixando que cada DAO faça isso, este problema é resolvido porem é gerado o problema de LazyInitializationException ao tentar acessar os dados da relação one-to-many, sem falar que ai a aplicação abre diversas sessões com o banco de dados.
[/quote]
São tantas sessões assim mesmo? Realmente está sentindo o impacto na aplicação?
Não podemos esquecer a frase do Knuth: “premature optimization is the root of all evil”
Lazy initialization não tem nada a ver com o número de sessões.
Se você quiser manter uma sessão aberta, não vai ter que se preocupar com isso, mas isso pra mim que está errado. O correto seria abrir a sessão, fazer a operação necessária, e fechá-la