Olá galera,
primeiramente peço desculpas caso já exista algum tópico parecido, porém não encontrei ninguem me explicasse com clareza a minha dúvida.
Minha dúvida é a seguinte.
Na minha aplicação tenho um banco com uma tabela de usuario e uma de veiculo com a chave do usuario. Ou seja uma many-to-one.
Eu não estava fechando as sessoes do hibernate e estava tudo certo.
Agora estou passando a fechar a sessao em cada metodo que acesso o banco. Porém está ocorrendo o LazyInitializationException.
Qual seria a melhor forma de trabalhar com esse relacionamento?
Utilizando lazy=false? Utilizando join?
Se for com join, como faço para popular o objeto com as colunas do resultado?
Ps.: é correto usar um findAll para usuario e depois um findByUsuario para achar os veiculo?
Lavieri
se vc for fechar a sessão teu fetch tem q ser EAGER e não LAZY…
A
alberas
Cara desculpe a ignorancia, mas como configuro isso sem usar annotations.
Guilherme_Gomes
No arquivo de configuração da classe no Hibernate, no mapeamento many-to-one você coloca lazy=“false”
Existe uma outra opção, você pode usar o session.merge() para reaver a sua entidade do banco, ou seja, o merge() vai retornar a entidade que você quer, com estado que ela está no banco e você pode utiliza-la novamente até o a session atual fechar.
Se ficou muito confuso:
Entidadee=pegaEntidadeDeAlgumLugar();// A entidade estava armazenada em algum lugar e a sessão que carregou ja foi fechadae=session.merge(e);// Carrega de novo a entidade do banco e coloca ela dentro da nova session// Aqui você já pode trabalhar com a entidade sem o problema do lazy init
A
alberas
Cara, deculpe
acho q não entendi, ou não implementei corretamente.
publicList<Usuario> findAll(){Sessionsession=sessionFactory.openSession();session.beginTransaction();List<Usuario> list = new ArrayList<Usuario>();try{
Queryquery=session.createQuery("from Usuario u");list=query.list();session.merge(newVeiculoDAO().findAll());returnlist;}catch(RuntimeExceptionre){
returnlist;}finally{
session.flush();session.close();}
}
A
alberas
Ainda persiste o erro.
Tenho certeza de que não implementei corretamente.
Só pra lembrar não estou usando nenhum framework de apresentação.