[Resolvido]Problema com persistência de entidade com propriedade "IDENTITY"

Pessoal Boa e Feliz ano novo para todos!

Estou com problema para persistir um objeto de Classe de Entidade com auto incremento. Vou postar o código e depois explico:

Classe de Entidade:

public class Endereco implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "codEndereco")
    private Short codEndereco;
    @Basic(optional = false)
    @Column(name = "logradouro")
    private String logradouro;
    @Basic(optional = false)
    @Column(name = "complemento")
    private String complemento;
    @Column(name = "numero")
    private String numero;
    @Basic(optional = false)
    @Column(name = "municipio")
    private String municipio;
    @Column(name = "localidade")
    private String localidade;
    @Basic(optional = false)
    @Column(name = "estado")
    private String estado;

    public Endereco() {
    }

    public Endereco(Short codEndereco) {
        this.codEndereco = codEndereco;
    }

    public Endereco(Short codEndereco, String logradouro, String complemento, String municipio, String estado) {
        this.codEndereco = codEndereco;
        this.logradouro = logradouro;
        this.complemento = complemento;
        this.municipio = municipio;
        this.estado = estado;
    }
    
    public Endereco(String logradouro, String complemento, String municipio, String estado) {
        this.logradouro = logradouro;
        this.complemento = complemento;
        this.municipio = municipio;
        this.estado = estado;
    }

    public Short getCodEndereco() {
        return codEndereco;
    }

    public void setCodEndereco(Short codEndereco) {
        this.codEndereco = codEndereco;
    }

    public String getLogradouro() {
        return logradouro;
    }

    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public String getNumero() {
        return numero;
    }

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

    public String getMunicipio() {
        return municipio;
    }

    public void setMunicipio(String municipio) {
        this.municipio = municipio;
    }

    public String getLocalidade() {
        return localidade;
    }

    public void setLocalidade(String localidade) {
        this.localidade = localidade;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codEndereco != null ? codEndereco.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 Endereco)) {
            return false;
        }
        Endereco other = (Endereco) object;
        if ((this.codEndereco == null && other.codEndereco != null) || (this.codEndereco != null && !this.codEndereco.equals(other.codEndereco))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "codEndereco=" + logradouro + " ]";
    }
    
}

segue a parte do controlador que grava os dados:

public void create(Endereco endereco) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(endereco);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

Segue o Bean que chama o metodo:

public String prepareCreate() {
        current = new Endereco();
        selectedItemIndex = -1;
        return "Create";
    }

    public String create() {
        try {
            getJpaController().create(current);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("EnderecoCreated"));
            return prepareCreate();
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
            return null;
        }
    }

Como podem perceber, estou utilizando as classes geradas automaticamente pelo NetBeans, com algumas modificações. O detalhe é que como o primeiro atributo da tabela é auto incrementado (IDENTITY) o banco dá erro se passarmos um valor no atributo codEndereco, até ai tudo bem. O problema é que se não passarmos valor nenhum a JPA fica reclamando que não tem o valor deste atributo e dá erro.

Segue o erro:

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.DataTruncation: Data truncation Error Code: 0 Call: INSERT INTO Endereco (complemento, estado, localidade, logradouro, municipio, numero) VALUES (?, ?, ?, ?, ?, ?) bind => [6 parameters bound] Query: InsertObjectQuery(codEndereco=Rua Antonio da Silva ])

Perceba que ele está trocando logradouro por codEndereco. Por quê ???

Sds,

Maurijava.

entao amigo… sua entidade contem 7 parametros e vc só esta passando 6…

acrescente mais um atributo que vai funcionar

[quote=darklordkamui]entao amigo… sua entidade contem 7 parametros e vc só esta passando 6…

acrescente mais um atributo que vai funcionar[/quote]

Caro darklordkamui,

Quando eu passo o atributo codEndereco ele dá erro no banco, não é para ele gerar automaticamente, então por que eu tenho que passar esse parametro? Num tó entendendo…

Maurijava.

Pessoal,

Consegui resolver.

Na verdade essa JPA não ajuda muito nas Exceptions… O erro era no banco: um atributo que coloquei com varchar e, acidentalmente, não determinei o tamanho, ai ficou como varchar (1) e eu estava passando uma cadeia de caracteres… Ou seja, nada haver a Exception???

Sds,

Maurijava.