Exception's no JPA

Olá pessoal!

tenho pesquisado algumas coisas a respeito de exceptions no JPA
mas pelo que vi, não encontrei muita informação,
gostaria de saber se tem algum padrão a seguir ou algo assim,

tenho uma aplicação em que uso exception’s checked,
mas gostaria de trata elas mesmo assim, mostrando ao usuario a causa da exceção
e também tratar-las conforme a causa

será que algum dos colegas pode me ajudar?

Abraço!

boa noite, primeiramente recomendo a você ir entrando nas excessões ate chegar na ultima.
a mesma sera uma sqlexception eu trabalho com mysql e consigo recuperar o erro do banco e retornar uma mensagem amigavel segue minhas classes.

package br.com.usinaweb.secom.exception;

/**
 * 
 * @author Rogerio Martins 17/02/2010
 */
public class LastException {

    /**
     * Percorrer a hierarquia da exception encontrada e retorna a ultima ramificação
     * que é a causa da exception
     * @param exception Exception a ser percorrida
     * @return Exception encontrada no final da ramificação
     */
    public Throwable findLastException(Throwable exception) {
        Throwable ee = exception.getCause();
        Throwable th = exception;

        while ((ee != null) && ((ee = ee.getCause()) != null)) {
            th = ee;
        }
        return th;
    }
}
package br.com.usinaweb.secom.exception;

import java.sql.SQLException;

/**
 * Excessões relacionadas a persistencia em bancos de dados
 * @author Rogerio Martins 17/02/2010
 */
public class DatabaseException extends SQLException {

    private String mensagem;

    private String getMensagem() {
        return mensagem;
    }

    private void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    /**
     * Método responsável por receber a exceção e informar a mensagem de erro do banco
     * @param exception contendo o erro do banco
     */
    public DatabaseException(SQLException exception) {

        Integer erro = exception.getErrorCode();

        switch (erro) {
            case 1062:
                setMensagem("Tentativa de duplicidade de registos!");
                break;
            case 1451:
                setMensagem("Erro com integridade referencial!");
                break;
            case 1022:
                setMensagem("Tentativa de duplicidade de chave!");
                break;
            case 1406:
                setMensagem("Erro dados longos para a coluna!");
                break;
            case 1408:
                setMensagem("Erro Campo obrigatório não pode ser nulo!");
                break;
            case 1048:
                setMensagem("Campo obrigatório não informado");
                break;

            default:
                setMensagem("Erro ao persistir os dados");
                break;
        }
    }

    @Override
    public String getMessage() {
        return getMensagem();
    }
}

chamada:

public void salvar() {
        try {
            bairroSession.salvar(this.getBeanBairro());
            contexto.adicionaMensagemInfo("Salvo com Sucesso");
            this.limpar();
        } catch (EJBException ex) {
            LastException lastException = new LastException();
            Throwable th = lastException.findLastException(ex);
            if (th instanceof SQLException) {
                contexto.adicionaMensagemErro(new DatabaseException((SQLException) th).getMessage());
            } else {
                contexto.adicionaMensagemErro(th.getMessage());
            }
        } catch (Exception ex) {
            contexto.adicionaMensagemErro("Erro: " + ex.getMessage());
        }
    }

espero que tenha ajudado…

boa solução cara!

tranquilo de entender e bem interessante

vou testar e amanhã posto o resultado aqui

Muito Obrigado mesmo!

Valeu! :smiley: