[Resolvido]Tratando de exceções

7 respostas
programaçãojavaexceptionhibernate
Patrick1

Pessoal estou tentando capturar uma exceção de duplicidade de chaves,mas por algum motivo nao consigo executar com sucesso.Eu gostaria de saber se o modo que estou persistindo meus valores influencia neste problema?

7 Respostas

A

Olá amigo, para podermos te ajudar necessitamos ver seu código, para uma melhor analise.

Patrick1

Segue o código abaixo:

package br.com.OPT_WEB_002.empresa;


import java.util.List;

import javax.ejb.EJBTransactionRolledbackException;
import javax.persistence.PersistenceException;

import org.hibernate.*;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.JDBCConnectionException;

import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;

import br.com.OPT_WEB_002.familia_item.Familia_Item;
import br.com.OPT_WEB_002.util.DAOException;
import br.com.OPT_WEB_002.util.ExcecaoTeste;
import br.com.OPT_WEB_002.util.HibernateUtil;

public class EmpresaDAOHibernate implements EmpresaDAO {

	private org.hibernate.Session session;
	
	
	@Override
	public void excluir(Empresa empresa) throws org.hibernate.HibernateException {
		
		
		this.session.delete(empresa);
			
	}

	@Override
	public void atualizar(Empresa empresa) {
		
		this.session.merge(empresa);
			
	}

	@Override
	public Empresa carregar(Integer cod_empresa) {
		
		return (Empresa) this.session.get(Empresa.class, cod_empresa);
	}
	
	@Override
	public Empresa buscar(int cod_empresa) {        
		
		String hql = "select e from Empresa e where e.cod_empresa = :cod_empresa";
		Query consulta = this.session.createQuery(hql);
		consulta.setInteger("cod_empresa", cod_empresa);

		return (Empresa) consulta.uniqueResult();

	}

	@Override
	public List<Empresa> listar() throws org.hibernate.HibernateException{
					
		return this.session.createCriteria(Empresa.class).list();
				
	}
	
	@Override
	public void salvar(Empresa empresa) throws DAOException{		
			
			try{
				
		    this.session.save(empresa);	    
		    this.session.flush();
		    
			}catch(ConstraintViolationException e){
		
									
			throw new DAOException(e.getMessage());
			
		}
	}
	
	public void setSession(org.hibernate.Session session) {
		this.session = session;
	}

	public org.hibernate.Session getSession() {
		return session;
	}

}
Patrick1

A captura esta sendo feita no meu metodo salvar,mas a minha duvida e a seguinte,pelo exemplos que vi aqui o pessoal utiliza a session para receber um getSessionFactory depois eles utilizam varias vzs a transação usando begin session depois persistem o objeto e depois disso usam commit ou flush.Nao estou fazendo nada disso apenas um save.

A

Os comandos flush e commit são necessários sim, o commit e a confirmação daquele transação, o flush libera todas as transações pedentes. De uma lida nesse pequeno artigo ele vai te ajudar.

Lucas_Camara

Isso vai depender de outros fatores. Você está rodando sua aplicação num web server (ex: tomcat) ou application server (ex: jboss)? Está usando EJB? Spring?

Patrick1

Estou usando tomcat e spring, gostaria de saber quais os melhores metodos que devo implementar quando estou salvando ou excluindo(ex:commit,close,flush).

Lucas_Camara

Usando spring, você jah tem o controle transacional dele para usar (através da anotação @Transactional no método), o que evita o controle manual.

Recomendo que dê uma lida na documentação do Spring para aprender mais sobre seu controle transacional.

Criado 8 de junho de 2017
Ultima resposta 9 de jun. de 2017
Respostas 7
Participantes 3