public void addTriagem(Triagem t){
GenericDao<Triagem> dao = new GenericDao<Triagem>(t);
dao.gravar();
}
public void editTriagem(Triagem t){
GenericDao<Triagem> dao = new GenericDao<Triagem>(t);
dao.atualizar();
}
Trexo de código onde adiciono é este
TriagemService triagemService = new TriagemService();
triagemService.addTriagem(t);
PacienteService pacienteService = new PacienteService();
pacienteService.atualizaPaciente(paciente);
Você utiliza a mesma instanci de triagem para salvar e atualizar? ou cria uma nova para atualizar?
Também é interessante colocar o session.close() em um bloco finally só por precaução.
FabioNoth
Todas as vezes que eu utilizo um serviço. Eu crio uma nova instancia.
calel
Sugiro uns testes:
1- No seu método ao invés de utilizar openSession você poderia utilizar o getCurrentSession().
2 - Salvar a triagem, carrega-la da base, alterar uma propriedade e depois chamar o editTriagem.
FabioNoth
Obrigado pela atenção calel
Então, tentei trocar os sessions por getCurrentSession.
da erro. Logo ao iniciar o sistema. Pois não existe nenhuma sessão corrente. (Acredito)
E quanto ao salvar a triagem. Eu tenho problemas na hora de salvar as alterações no paciente.
Quando debuguei o código ele mostra que o erro ocorre na segunda alteração!
Vou testar novamente com outras formas de getCurrentSession();
Mais obrigado por enquanto!
calel
Não tenho nenhum exemplo aqui, mas um pessoal falava de utilizar ThreadLocal para não ficar abrindo várias sessões também.
Esse getCurrentSession eu estava lendo que criava a session caso não existisse, podem ter me passado a informação incorreta… Mas caso ele retorne null você poderia fazer
calel,
agora tenho outro erro. Tentei aplicar o getCurrentSession so na classe que realmente precisa.
Agora o erro é:
No CurrentSessionContext configured!
calel
Tenta acrescentar essa linha no seu hibernate.cfg.xml
FabioNoth
Então calel.
O Hibernate ta reclamando que:
Illegal attempt to associate a collection with two open sessions
Que eu abro duas sessões para uma unica operação!
Pelo certo aquele getCurrentSession();
era para funcionar.
Mais ñ to conseguindo fazer!
B
blaithe
public void atualizar() {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tr = session.beginTransaction();
session.update(t);
tr.commit();
session.close();
return; << que p... é essa, o metodo não é void??
}
Faz sua transação assim... não tem como dar merda, e se der você vai saber certinho onde foi...
FabioNoth
mantem o mesmo erro! :?
FabioNoth
Ola pessoal, :roll:
Conseguir resolver o problema.
Infelizmente era algo bobo que não consegui identificar no inicio.
Havia esquecido de fechar uma sessão de busca listagem de pacientes.
Por isso que ficou assim.
Desde já agradeço a atenção de todos.
jv.nicocelli
FabioNoth, como resolveu o sem problema de duas sessões abertas?
Obrigado.
ErickRAR
Nicocelli, leia o que está acima do seu post.
jv.nicocelli
Falta de atenção da minha parte!
Não tinha visto que tinha duas páginas.
[quote=calel]Tenta acrescentar essa linha no seu hibernate.cfg.xml
esses 2 trechos que o calel postou… ja resolveram meu problema o/* (tbm fechei a sessão do método de busca… no finally)
will.agner
Eu estava tendo este erro, comecei a ler sobre o mesmo e analisar o sql que o hibernate estava gerando para a alteração.
Eu possuo uma classe Matriz que possui uma coleção de itens na classe ItemMatriz.
O meu mapeamento @OneToMany da classe matriz estava cascadetype.all por que realmente deve ser ! quando eu salvar a Matriz, ela deve salvar também os itens que eu setei.
O meu mapemante @ManyToOne da classe ItemMatriz também estava cascadetype.all (patiada minha) e ai estava dando o problema, pois quando eu alterava o item e tentava salvar, ele tentava cascatear para o pai e apresentava o problema de duas sessões abertas.
Eu alterei o cascade da classe filho e agora está gravando e alterando que é uma maravilha !