Re:coluna retornando null [RESOLVIDO]

Ola gente,

queria saber se alguem ja tevo uma mensagem de erro dessas e se caso sim, por favor poderia redigir em poucas palavras o por que do erro???

Obrigado,



[TopLink Warning]: 2012.09.27 02:50:46.200--UnitOfWork(18718469)--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.8 (Build 060830)): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column "cd_endereco" of relation "estabelecimento" does not existError Code: 0
Call:INSERT INTO labgeo.estabelecimento (cd_estabelecimento, cnpj, site, nome, cd_pessoa, cd_endereco) VALUES (?, ?, ?, ?, ?, ?)
        bind => [1, null, null, null, 18, null]



Hmm… o mistério da stacktrace…

Se você ler o erro vai ver que ele diz que não existe uma coluna cd_endereco em estabelecimento

Você leu a mensagem de erro? Oq você não entendeu dela?

Gente,

o que estou entendo é que no momento que estou tentando da um insert na tabela que estou querendo gravar, a coluna nao exista nessa tabela. Bom, de fato nao existe mesmo, ela faz parte de uma outra tabela filha que tem relação com a tabela que estou querendo persistir os dados. Mas nao sei como resolver a persistencia…estou usando JSF, toplink.

Obrigado

[quote=ychv]
Gente,

o que estou entendo é que no momento que estou tentando da um insert na tabela que estou querendo gravar, a coluna nao exista nessa tabela. Bom, de fato nao existe mesmo, ela faz parte de uma outra tabela filha que tem relação com a tabela que estou querendo persistir os dados. Mas nao sei como resolver a persistencia…estou usando JSF, toplink.

Obrigado[/quote]No seu mapeamento do toplink você informou que essa coluna se encontra em outra tabela?

Assim está

Tabela EstabelecimentoEndereco

   
    @JoinColumn(name = "cd_estabelecimento", referencedColumnName = "cd_estabelecimento")
    @ManyToOne
    private LEstabelecimento cdEstabelecimento;

Tabela Estabelecimento


   @JoinColumn(name = "cd_endereco", referencedColumnName = "cd_endereco")
   @ManyToOne
   private LEstabelecimentoEndereco cdEndereco;



Estabelecimento
cdEstabelecimento

EstabelecimentoEndereco

cdEstabelecimento
cdEndereco


Obrigado,

E onde você mapeou que a informação pertence a uma tabela filha? Onde está essa informação na classe?

Bom, nos beans eu apenas criei set, get e refatorei as chaves primarias de tabela mae para a tabela filha.

Estabelecimento


@Entity
@Table(name = "labgeo.estabelecimento")
public class LEstabelecimento implements Serializable {

    @Id
    @Column(name = "cd_estabelecimento", nullable = false)
    private Integer cdEstabelecimento;

    @Column(name = "nome")
    private String nome;

    @Column(name = "cnpj")
    private String cnpj;

    @Column(name = "site")
    private String site;
    
    @JoinColumn(name = "cd_pessoa", referencedColumnName = "cd_pessoa")
    @ManyToOne
    private LPessoa cdPessoa;
    
   @JoinColumn(name = "cd_endereco", referencedColumnName = "cd_endereco")
   @ManyToOne
   private LEstabelecimentoEndereco cdEndereco;

EstabelecimentoEndereco

@Entity
@Table(name = "labgeo.estabelecimento_endereco")

public class LEstabelecimentoEndereco implements Serializable {

    @Id
    @Column(name = "cd_endereco", nullable = false)
    private Integer cdEndereco;

    @Column(name = "endereco")
    private String endereco;

    @Column(name = "complemento_endereco")
    private String complementoEndereco;

    @Column(name = "numero")
    private String numero;

    @Column(name = "zona")
    private Character zona;

    @Column(name = "cep")
    private String cep;

    @Column(name = "bairro")
    private String bairro;

    @Column(name = "unid_consumidora")
    private String unidConsumidora;

    @Column(name = "cd_uf")
    private Integer cdUf;

    @Column(name = "fone")
    private String fone;
    
    @JoinColumn(name = "cd_estabelecimento", referencedColumnName = "cd_estabelecimento")
    @ManyToOne
    private LEstabelecimento cdEstabelecimento;

Oq é tabela filha para você? Filho é quando uma herda da outra.

Quando um relacionamento é ManyToOne dos lados? Nunca vi isso.

Bom,

posso ta errando nesse ponto, pois adicionei as chaves primarias como mostrado. eu vou rever isso e corrir, e ve se ta certo. mas, vc poderia postar um exemplo de persistencia de objeto (entre duas tabelas relcionadas), para poder me basear e, certamente, aprender?

Obrigado,

Estava errado mesmo o mapeamento no topLink, dai refiz e deu certo. Ficou assim agora:

Tabela Estabelecimento

   @OneToMany(cascade = CascadeType.ALL, mappedBy = "cdEstabelecimento")
   private Collection<LEstabelecimentoEndereco> lEstabelecimentoEnderecoCollection;
Tabela EstabelecimentoEndereco

    @JoinColumn(name = "cd_estabelecimento", referencedColumnName = "cd_estabelecimento")
    @ManyToOne
    private LEstabelecimento cdEstabelecimento;