Erro ao tentar persistir

6 respostas
M

Pessoal,

seguinte estou com um problema. Quando estou tentando cadastrar um dado ele está me apresentando o seguinte erro: org.hibernate.exception.ConstraintViolationException: could not insert:

acredito que é pq um valor que deveria estar não nulo, não estar…ele estar nulo. E esse valor é chave composta da tabela que estou tentando inserir.

segue o código.

public String salvar() throws Exception {
        Session session = HibernateUtil.getSession();
        getAniversarianteDao().setSession(session);
        getUnidadeDao().setSession(session);
        
       
        if (this.getAniversariante().getId() != null) {
            setMsg("Alteração efetuada com sucesso!");
        } else {
            setMsg("Inclusão efetuada com sucesso!");
        }

        FormatoData formatador = new FormatoData();
        aniversariante.setDataNascimento(Calendar.getInstance());
        aniversariante.getDataNascimento().setTime(formatador.parseStringToDate(dtNascimento));

        System.out.println(aniversariante.getUnidade().getNome());
        getAniversarianteDao().saveOrUpdate(getAniversariante());

        return listar();
    }

antes de salvar ele tem todos os valores só não tem o valor da unidade…acho que está vindo da Jsp nulo.

JSP:

<div id="aniversariantes" style="width:580px;">
        <s:form id="frmCadAniversariante" action="aniversariante_salvar.action"
                onsubmit="return isCamposValidosAniversariante()"
                theme="simple" name="frmAniversariante">
            <s:hidden name="aniversariante.id"/>

            <table border="0" cellspacing="6">
                <tr style="height:20px">
                    <td align="Left">Nome:</td>
                    <td align="Left">
                        <s:textfield
                            size="70"
                            maxLength="100"
                            name="aniversariante.nome"
                            required="true"
                            id="nome"/>
                    </td>
                </tr>
                <tr style="height:20px;width:20px">
                    <td>Usuário:</td>
                    <td nowrap="nowrap" align="Left">
                        <s:textfield size="8"
                                     maxLength="7"
                                     name="aniversariante.idRede"
                                     id="idRede"
                                     onkeypress="return filtroCaracteres(event,'EePpCc0123456789')"/>
                    </td>
                </tr>
                <tr>
                    <td>Unidade:</td>
                    <td>
                        <s:select list="unidades"
                                  listKey="id"
                                  listValue="cgc+' - '+sigla"
                                  headerKey=""
                                  headerValue="Selecione"
                                  name="aniversariante.unidade.id"
                                  id="unidade" cssStyle="width:130px"/>
                    </td>
                </tr>
                <tr style="height:20px;width:20px">
                    <td>Data Nascimento:</td>
                    <td nowrap="nowrap" align="Left">
                        <s:textfield size="13"
                                     maxLength="10"
                                     name="dtNascimento"
                                     id="dtNascimento"
                                     onkeydown="formatar(this,'##/##/####')"
                                     onkeypress="return filtroCaracteres(event,'[telefone removido]')"/>
                    </td>
                </tr>
            </table>
            <br>
            <table align="right">
                <tr>
                    <td>
                        <s:submit
                            showLoadingText="false"
                            value="Salvar"
                            cssStyle="width: 100px;cursor: hand;"
                            cssClass="BTNADD"/>
                    </td>
                    <td>
                        <div>
                            <INPUT
                                type="button"
                                value="Cancelar"
                                Title="Cancelar"
                                onclick="window.location='<s:text name="aniversariante_listar.action"/>'"
                                class="BTNADD">
                        </div>
                    </td>
                </tr>
            </table>
        </s:form>
    </div>

6 Respostas

Andre_Fonseca

oi,

o problema não é variável nula, mas sim restrição de constraint na hora de inserir

http://www.guj.com.br/posts/list/75241.java

abs

M

assim,

a tabela onde quero inserir o dado tem uma chave estrangeira. Só que na hora de inserir os dados essa chave estrangeira ta sem valor, ta como null. Acho que é por isso que ta com problema, pq estava funcionando normalmente.

Andre_Fonseca

oi,

se vc reinicia a aplicação passa a funcionar??

M

não.

M

No console estão aparecendo esses erros:

-null id in br.teste.persistencia.vo.Aniversariante entry (don’t flush the Session after an exception occurs)
-an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
-ERROR: duplicate key violates unique constraint

alguém sabe como corrijo isso???

Andre_Fonseca

oi,

vc está usando que banco de dados?
você está usando autoincrement ou algo assim?
posta o código do getUnidadeDAO() e tb do HibernateUtil

Acho que pode estar acontecendo duas coisas

  • erro no tratamento da session do hibernate - está fechando qdo acontece uma exception
  • esta exception pode estar acontecendo por causa de um campo mal mapeado - tipo o autoincrement que falei

abs

Criado 15 de janeiro de 2010
Ultima resposta 16 de jan. de 2010
Respostas 6
Participantes 2