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.