Fórum Método do DAO não fecho a sessão #600086
28/01/2019
0
Fala ai pessoal, blz?
Então, no meu Projeto de TCC, estou com um problema. Eu em cada método do DAO não fecho a sessão, um exemplo:
Quando eu fui deletar algum objeto e esse objeto no mapeamento tinha algum OneToMany, ele reclama de duas sessões abertas e dava Transaction not sucessfuly started. Ai eu fiz um método para excluir por SQL Query
E está excluindo! Porém, hoje fui dar um update no projeto, pois Gerador vai ter uma List de EstoqueGerador... EstoqueGerador possui como atributos: idEstoqueGerador, Estoque e Gerador. A Classe Estoque possui: idEstoque, Material e quantidadeMaterial.
Ai eu consegui fazer tudo corretamente na Main (sem ser na view) e instanciei tudo... e foi para o banco sem nenhum error, porém na view, dava error de return null, pois como tem várias associações e essas associações não foram inicializadas, porém qd inicializei, deu StackOverFlow... Ai eu criei o seguinte:
Esses atributos e o método estão no ControladorLogado, que gerencia o login (sem o filtro ainda)
Porém quando usa o alterar do DAO, ele dá o mesmo error, não deixando dar update por causa de 2 sessões abertas, e dessa vez não da pra usar o NativeSQL, por causa que é INSERT...
Eu pensei em fazer um método que retornasse o ID da chave primária para fazer INSERT manualmente... Mas está difícil, sabe de algum jeito de acabar com esse problema de 2 sessões? Já tentei s.close() e abrir uma nova Sessão no mesmo método, etc.
Essa dúvida foi gerada a partir de um comentário na aula [url:descricao=Calendar + Impressão da data com Ajax–JSF 2.0 com Primefaces - Curso JSF com Primefaces - Parte 4]https://www.devmedia.com.br/calendar-impressao-da-data-com-ajax-jsf-2-0-com-primefaces-curso-jsf-com-primefaces-parte-4/24145[/url]
Então, no meu Projeto de TCC, estou com um problema. Eu em cada método do DAO não fecho a sessão, um exemplo:
public void alterar() {
try {
s.getTransaction().begin();
s.update(getObjetoModelo());
} catch (HibernateException ex) {
String mensagem = UtilError.getMensagemErro(ex);
System.err.println("Erro ao incluir alterar: " + mensagem);
s.getTransaction().rollback();
} finally {
s.getTransaction().commit();
s.flush();
}
}
Quando eu fui deletar algum objeto e esse objeto no mapeamento tinha algum OneToMany, ele reclama de duas sessões abertas e dava Transaction not sucessfuly started. Ai eu fiz um método para excluir por SQL Query
public void excluirGeradorPorSQL(long id){
try{
s.getTransaction().begin();
int a = s.createSQLQuery("DELETE FROM Estoque WHERE gerador_idPessoaJuridica = " + id).executeUpdate();
int b = s.createSQLQuery("DELETE FROM Gerador WHERE idPessoaJuridica = " + id).executeUpdate();
}catch(HibernateException ex){
String mensagem = UtilError.getMensagemErro(ex);
System.err.println("Erro ao excluir Gerador --> " + mensagem);
s.getTransaction().rollback();
}
s.getTransaction().commit();
s.flush();
}
E está excluindo! Porém, hoje fui dar um update no projeto, pois Gerador vai ter uma List de EstoqueGerador... EstoqueGerador possui como atributos: idEstoqueGerador, Estoque e Gerador. A Classe Estoque possui: idEstoque, Material e quantidadeMaterial.
Ai eu consegui fazer tudo corretamente na Main (sem ser na view) e instanciei tudo... e foi para o banco sem nenhum error, porém na view, dava error de return null, pois como tem várias associações e essas associações não foram inicializadas, porém qd inicializei, deu StackOverFlow... Ai eu criei o seguinte:
//Atributos para criar um Novo EstoqueGerador
private Material matEscolhido = new Material();
private Estoque estoque = new Estoque();
private EstoqueGerador estoqueGer = new EstoqueGerador();
private double quantidadeMat = 0.0;
public void adicionarNaLista(){
estoque.setMaterial(matEscolhido);
estoque.setQuantidadeMaterial(quantidadeMat);
estoque.setEstoqueGerador(estoqueGer);
estoqueGer.setEstoque(estoque);
estoqueGer.setGerador(geradorLogado);
geradorLogado.adicionarEstoqueGerador(estoqueGer);
DAO<Gerador> acesso = new DAO(geradorLogado);
acesso.alterar();
}
Esses atributos e o método estão no ControladorLogado, que gerencia o login (sem o filtro ainda)
Porém quando usa o alterar do DAO, ele dá o mesmo error, não deixando dar update por causa de 2 sessões abertas, e dessa vez não da pra usar o NativeSQL, por causa que é INSERT...
Eu pensei em fazer um método que retornasse o ID da chave primária para fazer INSERT manualmente... Mas está difícil, sabe de algum jeito de acabar com esse problema de 2 sessões? Já tentei s.close() e abrir uma nova Sessão no mesmo método, etc.
Essa dúvida foi gerada a partir de um comentário na aula [url:descricao=Calendar + Impressão da data com Ajax–JSF 2.0 com Primefaces - Curso JSF com Primefaces - Parte 4]https://www.devmedia.com.br/calendar-impressao-da-data-com-ajax-jsf-2-0-com-primefaces-curso-jsf-com-primefaces-parte-4/24145[/url]
Rafael
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)