Pessoal, estou quase ficando louco com isso aqui. O problema é o seguinte, Tenho 2 atributos em uma classe com o mapeamento quase idêntico. O problema é: um funciona e outro não. Tenho uma classe chamada Empresa e outra chamada Cliente. Na classe cliente tenho o atributo matriz. Na tabela tem a informação da matriz, mas o hibernate retorna null. Perceba que o atribulo localEntrega é quase a mesma coisa, e é do mesmo tipo, e funciona normalmente.
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SecondaryTable;
import javax.persistence.SecondaryTables;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Valid;
import com.democrata.comercial.pedido.NegociacaoComercial;
import com.democrata.comercial.pedido.VariacaoTabelaCliente;
@Entity
@Table(name="EMPRESA")
@SecondaryTables({
@SecondaryTable(name="PREFCLI"),
@SecondaryTable(name="CLIENTE_NEGOCIACAO_COMERCIAL",
pkJoinColumns={@PrimaryKeyJoinColumn(name="CLIENTE")}
),
@SecondaryTable(name="COMPLEMPRESA",
pkJoinColumns={@PrimaryKeyJoinColumn(name="EMPRESA")}
)
})
@DiscriminatorValue("2")
public class Cliente extends Empresa implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public Cliente(){
super();
getTipoEmpresa().setTipo(2);
}
@Column(name = "CARTEIRA")
private Character carteira;
@Column(name = "RATING_COMERCIAL")
private String ratingComercial;
@Column(name = "RATING_FINANCEIRO")
private String ratingFinanceiro;
@Column(name = "NUMERO_LOJAS")
private Short numeroLojas;
@Column(name = "EMAIL_FINANCEIRO")
private String emailFinanceiro;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(table="PREFCLI", name="REPRESENTANTE")
private Representante representante;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(table="PREFCLI", name="LOCAL_ENTREGA")
private Empresa localEntrega;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(table="PREFCLI", name="MATRIZ")
private Empresa matriz;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(table="PREFCLI", name="LOCAL_COBRANCA")
private Empresa localCobranca;
@OneToMany(mappedBy="cliente", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
private Collection<VariacaoTabelaCliente> variacaoTabelaCliente;
@Embedded
private NegociacaoComercial negociacaoComercial;
@Embedded
private InformacaoBancaria informacaoBancaria;
@Embedded
private InformacaoCredito informacaoCredito;
@Column(name="VALIDACAO_DOCUMENTACAO")
@Temporal(TemporalType.TIMESTAMP)
private Date validacaoDocumentacao;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="TRADER")
private Trader trader;
public final Trader getTrader() {
return trader;
}
public final void setTrader(Trader trader) {
this.trader = trader;
}
public void addVariacaoTabelaPreco(Filial unidadeProducao, char variacao){
VariacaoTabelaCliente vartab = new VariacaoTabelaCliente();
vartab.setCliente(this);
vartab.setUnidadeProducao(unidadeProducao);
vartab.setVariacaoTabelaPreco(variacao);
getVariacaoTabelaCliente().add(vartab);
}
public char getVariacaotabelaByFilial(Filial filial){
char tabela = 'A';
for (VariacaoTabelaCliente vtc: getVariacaoTabelaCliente()){
if (vtc.getUnidadeProducao().getCgcCpf().equals(filial.getCgcCpf())){
tabela = vtc.getVariacaoTabelaPreco();
}
}
return tabela;
}
public Character getCarteira() {
return carteira;
}
public void setCarteira(Character carteira) {
this.carteira = carteira;
}
@NotEmpty
public String getRatingComercial() {
if (ratingComercial.isEmpty()) setRatingComercial("B");
return ratingComercial;
}
public void setRatingComercial(String ratingComercial) {
this.ratingComercial = ratingComercial;
}
public String getRatingFinanceiro() {
if (ratingFinanceiro.isEmpty()) setRatingFinanceiro("B");
return ratingFinanceiro;
}
public void setRatingFinanceiro(String ratingFinanceiro) {
this.ratingFinanceiro = ratingFinanceiro;
}
public Short getNumeroLojas() {
return numeroLojas;
}
public void setNumeroLojas(Short numeroLojas) {
this.numeroLojas = numeroLojas;
}
public String getEmailFinanceiro() {
return emailFinanceiro;
}
public void setEmailFinanceiro(String emailFinanceiro) {
this.emailFinanceiro = emailFinanceiro;
}
@NotNull
public Representante getRepresentante() {
return representante;
}
public void setRepresentante(Representante representante) {
this.representante = representante;
}
public Empresa getLocalEntrega() {
return localEntrega;
}
public void setLocalEntrega(Empresa localEntrega) {
this.localEntrega = localEntrega;
}
public Empresa getLocalCobranca() {
return localCobranca;
}
public void setLocalCobranca(Empresa localCobranca) {
this.localCobranca = localCobranca;
}
public NegociacaoComercial getNegociacaoComercial() {
return negociacaoComercial;
}
public void setNegociacaoComercial(NegociacaoComercial negociacaoComercial) {
this.negociacaoComercial = negociacaoComercial;
}
@NotNull @Valid
public InformacaoBancaria getInformacaoBancaria() {
return informacaoBancaria;
}
public void setInformacaoBancaria(InformacaoBancaria informacaoBancaria) {
this.informacaoBancaria = informacaoBancaria;
}
public Collection<VariacaoTabelaCliente> getVariacaoTabelaCliente() {
return variacaoTabelaCliente;
}
public void setVariacaoTabelaCliente(Collection<VariacaoTabelaCliente> variacaoTabelaCliente) {
this.variacaoTabelaCliente = variacaoTabelaCliente;
}
public InformacaoCredito getInformacaoCredito() {
return informacaoCredito;
}
public void setInformacaoCredito(InformacaoCredito informacaoCredito) {
this.informacaoCredito = informacaoCredito;
}
public Date getValidacaoDocumentacao() {
return validacaoDocumentacao;
}
public void setValidacaoDocumentacao(Date validacaoDocumentacao) {
this.validacaoDocumentacao = validacaoDocumentacao;
}
public final Empresa getMatriz() {
return matriz;
}
public final void setMatriz(Empresa matriz) {
this.matriz = matriz;
}
}
agora a classe Empresa:
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SecondaryTable;
import javax.persistence.Table;
import org.hibernate.validator.Email;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Pattern;
import org.hibernate.validator.Valid;
import com.democrata.cep.Endereco;
@Entity
@Table(name="EMPRESA")
@SecondaryTable(name="PREFCLI")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TIPO_EMPRESA",discriminatorType=DiscriminatorType.INTEGER)
public class Empresa implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "CGC_CPF")
private String cgcCpf;
@Column(name = "FIS_JUR")
private String fisicaJuridica;
@Column(name = "RAZAO")
private String razaoSocial;
@Column(name = "INSC_ESTADUAL")
private String inscEstadual;
@Column(name = "INSC_MUNICIPAL")
private String inscMunicipal;
@Column(name = "RG")
private String rg;
@Column(name = "FONE1")
private String fone1;
@Column(name = "FONE2")
private String fone2;
@Column(name = "FAX")
private String fax;
@Column(name = "E_MAIL")
private String eMail;
@Column(name = "FANTASIA")
private String fantasia;
@Column(name = "CONTATO")
private String contato;
@Column(name = "SITUACAO")
private String situacao;
@Column(name = "SUFRAMA")
private String suframa;
@Embedded
private Endereco endereco;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "TIPO_EMPRESA", referencedColumnName = "TIPO", insertable=false, updatable=false)
@NotNull
private TipoEmpresa tipoEmpresa;
public Empresa(){
setTipoEmpresa(new TipoEmpresa());
setEndereco(new Endereco());
setFisicaJuridica("J");
}
@CnpjCpf
public String getCgcCpf() {
return cgcCpf;
}
public void setCgcCpf(String cgcCpf) {
this.cgcCpf = cgcCpf;
}
@NotNull @Pattern(regex="[F|J]",message="deve ser F ou J")
public String getFisicaJuridica() {
return fisicaJuridica;
}
public void setFisicaJuridica(String fisicaJuridica) {
this.fisicaJuridica = fisicaJuridica;
}
@NotEmpty
public String getRazaoSocial() {
return razaoSocial;
}
public void setRazaoSocial(String razaoSocial) {
this.razaoSocial = razaoSocial;
}
@NotEmpty
public String getInscEstadual() {
if (getFisicaJuridica().equals("F")) inscEstadual = "ISENTO";
return inscEstadual;
}
public void setInscEstadual(String inscEstadual) {
this.inscEstadual = inscEstadual;
}
public String getInscMunicipal() {
return inscMunicipal;
}
public void setInscMunicipal(String inscMunicipal) {
this.inscMunicipal = inscMunicipal;
}
public String getRg() {
return rg;
}
public void setRg(String rg) {
this.rg = rg;
}
@NotEmpty
public String getFone1() {
return fone1;
}
public void setFone1(String fone1) {
this.fone1 = fone1;
}
public String getFone2() {
return fone2;
}
public void setFone2(String fone2) {
this.fone2 = fone2;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
@NotEmpty @Email
public String getEMail() {
return eMail;
}
public void setEMail(String eMail) {
this.eMail = eMail;
}
@NotEmpty
public String getFantasia() {
return fantasia;
}
public void setFantasia(String fantasia) {
this.fantasia = fantasia;
}
@NotEmpty
public String getContato() {
return contato;
}
public void setContato(String contato) {
this.contato = contato;
}
public String getSituacao() {
return situacao;
}
public void setSituacao(String situacao) {
this.situacao = situacao;
}
public String getSuframa() {
return suframa;
}
public void setSuframa(String suframa) {
this.suframa = suframa;
}
@NotNull @Valid
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
public TipoEmpresa getTipoEmpresa() {
return tipoEmpresa;
}
public void setTipoEmpresa(TipoEmpresa tipoEmpresa) {
this.tipoEmpresa = tipoEmpresa;
}
@Override
public int hashCode() {
int hash = 0;
hash += (getCgcCpf() != null ? getCgcCpf().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 Empresa)) {
return false;
}
Empresa other = (Empresa) object;
if ((this.getCgcCpf() == null && other.getCgcCpf() != null) || (this.getCgcCpf() != null && !this.cgcCpf.equals(other.cgcCpf))) {
return false;
}
return true;
}
}
Estou ficando louco com isso… não tem lógica. Ontem criei duas classes idênticas, só mudava o nome delas. Coloquei um atributo matriz igual esse da classe Cliente. em uma classe funcionava e na outra não. Tem explicação?
Vallew