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.
F
FabioNoth
Todas as vezes que eu utilizo um serviço. Eu crio uma nova instancia.
C
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.
F
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!
C
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!
C
calel
Tenta acrescentar essa linha no seu hibernate.cfg.xml
F
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...
F
FabioNoth
mantem o mesmo erro! :?
F
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.
J
jv.nicocelli
FabioNoth, como resolveu o sem problema de duas sessões abertas?
Obrigado.
E
ErickRAR
Nicocelli, leia o que está acima do seu post.
J
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)
W
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 !