Erro Hibernate na hora do update

2 respostas
javahibernate
D

Carrego as informações de endereço na tela e ao chamar o método de update das informações aparece um erro:

INFO: [Wpos_Advice] 26/08/16 09:35 ERROR [http-thread-pool-8080(1)] (AssertionFailure.java:22) - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: cannot copy a reference to an object with a null id

Classe TgrEnderecopessoa

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.advpos.entities;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 *
 * @author fcscjunior
 */
@Entity
@Table(name = "TGR_ENDERECO_PESSOA")
//@XmlRootElement
public class TgrEnderecoPessoa implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @EmbeddedId
    protected TgrEnderecoPessoaPK tgrEnderecoPessoaPK;
    @Column(name = "SIGLA_ENDERECO")
    private String siglaEndereco;
    @Column(name = "CEP")
    private String cep;
    @Column(name = "DESC_LOGRADOURO")
    private String descLogradouro;
    @Column(name = "DESC_COMPLEMENTO")
    private String descComplemento;
    @Column(name = "NUMERO")
    private String numero;
    @Column(name = "DESC_BAIRRO")
    private String descBairro;
    @Column(name = "COD_LOGRAD_CEP")
    private Long codLogradCep;
    @Column(name = "DT_CADASTRO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dtCadastro;
    @Column(name = "DT_ALTERACAO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dtAlteracao;
    @Column(name = "DT_EXCLUSAO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dtExclusao;
    @Column(name = "ID_USUARIO_CAD")
    private Long idUsuarioCad;
    @Column(name = "ID_USUARIO_ALT")
    private Long idUsuarioAlt;
    @Column(name = "ID_USUARIO_EXC")
    private Long idUsuarioExc;
    @Column(name = "FG_EXCLUIDO")
    private String fgExcluido;
    @Column(name = "SIGLA_UF")
    private String siglaUf;
    @Column(name = "DESC_LOCALIDADE")
    private String descLocalidade;
    @Column(name = "FG_PRINCIPAL")
    private String fgPrincipal;
    @Column (name = "ID_SYS_PAIS")
    private Long idSysPais;
    @Column(name = "ID_TGR_PESSOA")
    private Long idTgrPessoa;
    
    @JoinColumns({
        @JoinColumn(name = "GUID", referencedColumnName = "GUID", insertable = false, updatable = false),
        @JoinColumn(name = "ID_TGR_PESSOA", referencedColumnName = "ID_TGR_PESSOA", insertable = false, updatable = false)})
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private TgrPessoa tgrPessoa;
    
    @Transient
    private String tipoEndereco;
    
    @Transient
    private Long idTgrEnderecoPessoa;
    
    public TgrEnderecoPessoa() {
    }

    public TgrEnderecoPessoa(TgrEnderecoPessoaPK tgrEnderecoPessoaPK) {
        this.tgrEnderecoPessoaPK = tgrEnderecoPessoaPK;
    }

    public TgrEnderecoPessoa(String guid, long idTgrEnderecoPessoa) {
        this.tgrEnderecoPessoaPK = new TgrEnderecoPessoaPK(guid, idTgrEnderecoPessoa);
    }

    public TgrEnderecoPessoaPK getTgrEnderecoPessoaPK() {
        return tgrEnderecoPessoaPK;
    }

    public void setTgrEnderecoPessoaPK(TgrEnderecoPessoaPK tgrEnderecoPessoaPK) {
        this.tgrEnderecoPessoaPK = tgrEnderecoPessoaPK;
    }

    public String getSiglaEndereco() {
        return siglaEndereco;
    }

    public void setSiglaEndereco(String siglaEndereco) {
        this.siglaEndereco = siglaEndereco;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getDescLogradouro() {
        return descLogradouro;
    }

    public void setDescLogradouro(String descLogradouro) {
        this.descLogradouro = descLogradouro;
    }

    public String getDescComplemento() {
        return descComplemento;
    }

    public void setDescComplemento(String descComplemento) {
        this.descComplemento = descComplemento;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getDescBairro() {
        return descBairro;
    }

    public void setDescBairro(String descBairro) {
        this.descBairro = descBairro;
    }

    public Long getCodLogradCep() {
        return codLogradCep;
    }

    public void setCodLogradCep(Long codLogradCep) {
        this.codLogradCep = codLogradCep;
    }

    public Date getDtCadastro() {
        return dtCadastro;
    }

    public void setDtCadastro(Date dtCadastro) {
        this.dtCadastro = dtCadastro;
    }

    public Date getDtAlteracao() {
        return dtAlteracao;
    }

    public void setDtAlteracao(Date dtAlteracao) {
        this.dtAlteracao = dtAlteracao;
    }

    public Date getDtExclusao() {
        return dtExclusao;
    }

    public void setDtExclusao(Date dtExclusao) {
        this.dtExclusao = dtExclusao;
    }

    public Long getIdUsuarioCad() {
        return idUsuarioCad;
    }

    public void setIdUsuarioCad(Long idUsuarioCad) {
        this.idUsuarioCad = idUsuarioCad;
    }

    public Long getIdUsuarioAlt() {
        return idUsuarioAlt;
    }

    public void setIdUsuarioAlt(Long idUsuarioAlt) {
        this.idUsuarioAlt = idUsuarioAlt;
    }

    public Long getIdUsuarioExc() {
        return idUsuarioExc;
    }

    public void setIdUsuarioExc(Long idUsuarioExc) {
        this.idUsuarioExc = idUsuarioExc;
    }

    public String getFgExcluido() {
        return fgExcluido;
    }

    public void setFgExcluido(String fgExcluido) {
        this.fgExcluido = fgExcluido;
    }

    public String getSiglaUf() {
        return siglaUf;
    }

    public void setSiglaUf(String siglaUf) {
        this.siglaUf = siglaUf;
    }

    public String getDescLocalidade() {
        return descLocalidade;
    }

    public void setDescLocalidade(String descLocalidade) {
        this.descLocalidade = descLocalidade;
    }

    public String getFgPrincipal() {
        return fgPrincipal;
    }

    public void setFgPrincipal(String fgPrincipal) {
        this.fgPrincipal = fgPrincipal;
    }

    public Long getIdSysPais() {
        return idSysPais;
    }

    public void setIdSysPais(Long idSysPais) {
        this.idSysPais = idSysPais;
    }

    public TgrPessoa getTgrPessoa() {
        return tgrPessoa;
    }

    public void setTgrPessoa(TgrPessoa tgrPessoa) {
        this.tgrPessoa = tgrPessoa;
    }

    public String getTipoEndereco() {
        return tipoEndereco;
    }

    public void setTipoEndereco(String tipoEndereco) {
        this.tipoEndereco = tipoEndereco;
    }

    public Long getIdTgrEnderecoPessoa() {
        return idTgrEnderecoPessoa;
    }

    public void setIdTgrEnderecoPessoa(Long idTgrEnderecoPessoa) {
        this.idTgrEnderecoPessoa = idTgrEnderecoPessoa;
    }

    public Long getIdTgrPessoa() {
        return idTgrPessoa;
    }

    public void setIdTgrPessoa(Long idTgrPessoa) {
        this.idTgrPessoa = idTgrPessoa;
    }
    
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (tgrEnderecoPessoaPK != null ? tgrEnderecoPessoaPK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof TgrEnderecoPessoa)) {
            return false;
        }
        TgrEnderecoPessoa other = (TgrEnderecoPessoa) object;
        if ((this.tgrEnderecoPessoaPK == null && other.tgrEnderecoPessoaPK != null) || (this.tgrEnderecoPessoaPK != null && !this.tgrEnderecoPessoaPK.equals(other.tgrEnderecoPessoaPK))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.advpos.entities.TgrEnderecoPessoa[ tgrEnderecoPessoaPK=" + tgrEnderecoPessoaPK + " ]";
    }
}

Classe TgrEnderecopessoaPK

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.advpos.entities;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Embeddable;

/**
 *
 * @author fcscjunior
 */
@Embeddable
public class TgrEnderecoPessoaPK implements Serializable {
    @Basic(optional = false)
    @Column(name = "GUID", insertable=false, updatable=false)
    private String guid;
    @Basic(optional = false)
    @Column(name = "ID_TGR_ENDERECO_PESSOA")
    private long idTgrEnderecoPessoa;

    public TgrEnderecoPessoaPK() {
    }

    public TgrEnderecoPessoaPK(String guid, long idTgrEnderecoPessoa) {
        this.guid = guid;
        this.idTgrEnderecoPessoa = idTgrEnderecoPessoa;
    }

    public String getGuid() {
        return guid;
    }

    public void setGuid(String guid) {
        this.guid = guid;
    }

    public long getIdTgrEnderecoPessoa() {
        return idTgrEnderecoPessoa;
    }

    public void setIdTgrEnderecoPessoa(long idTgrEnderecoPessoa) {
        this.idTgrEnderecoPessoa = idTgrEnderecoPessoa;
    }
        

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (guid != null ? guid.hashCode() : 0);
        hash += (int) idTgrEnderecoPessoa;
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof TgrEnderecoPessoaPK)) {
            return false;
        }
        TgrEnderecoPessoaPK other = (TgrEnderecoPessoaPK) object;
        if ((this.guid == null && other.guid != null) || (this.guid != null && !this.guid.equals(other.guid))) {
            return false;
        }
        if (this.idTgrEnderecoPessoa != other.idTgrEnderecoPessoa) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.advpos.entities.TgrEnderecoPessoaPK[ guid=" + guid + ", tgrEnderecoPessoaH=" + idTgrEnderecoPessoa + " ]";
    }
    
}

Esse erro acontece apenas na tela de endereço do Cliente, utilizo o mesmo método na tela de endereço do Fornecedor e o erro não acontece.

Saber me dizer o que pode ser o erro?

2 Respostas

Sandro_Machado
cannot copy a reference to an object with a null id

está dizendo que está tentando pegar um objeto com o id nullo. Verifique direto no banco como está o id deste objeto, bem como o mapeamento do hibernate na classe, se possível poste a classe em questão e a pesquisa no banco.

D

Sandro, obrigado pelo comentário.

Postei minhas classes que mapeiam o banco de dados e quando vou atualizar chamo o método abaixo. Sei que ele funciona pois utilizo esse método para atualizar outros endereços e funciona.

public void atualizar(TgrEnderecoPessoa enderecoPessoa) {
        enderecoPessoaDao.update(enderecoPessoa);
    }

Debugando o projeto percebi que a classe vem com o o id da tabela com o valor. Alguns campos apenas vem nulos, mas são campos opcionais.

Outro ponto que pode levar em conta. Quando insiro primeiro um registro de endereço e em seguida edito esse registro, ele funciona normalmente, sem apresentar erro. Porém já comparei os objetos antes e depois de inserir e eles são iguais.

Obrigado.

Criado 26 de agosto de 2016
Ultima resposta 26 de ago. de 2016
Respostas 2
Participantes 2