Hibernate, recuperar: ok. salvar: fail

6 respostas
A

Amigos, eu tenho o seguinte mapeamento com esses 2 Beans.
Pessoa.java

@Entity
@Table(schema = "pessoa", name = "pessoa")
@Inheritance(strategy = InheritanceType.JOINED)
public class Pessoa implements Serializable, Comparable<Pessoa> {
    @Id
    @GeneratedValue
    @Column(name = "cod_pessoa")
    private Integer codPessoa;
    private String nome;
    @Temporal(TemporalType.DATE)
    private Date nascimento;
    private String tipo;
    private String documento;
    private String atalho;
    @OneToOne(cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    private PessoaResidencial pessoaResidencial;

//getters e setters omitidos

PessoaResidencial.java

@Entity
@Table(schema = "pessoa", name = "pessoa_residencial")
public class PessoaResidencial implements Serializable {
    @Id
    private Integer pessoa;
    private String endereco;
    private String bairro;
    private String cidade;
    private String uf;
    private String cep;
    private String telefone1;
    @Column(name = "fax")
    private String celular;
    private String tipo;
    @Column(name = "tipo_telefone")
    private String tipoTelefone;
    private String email;

//getters e setters omitidos

Recuperar eu recupero na boa.

pessoa = pessoaManager.selectById(Integer.valueOf(codPessoa));

Com o codigo acima eu recupero e populo os objetos certinho.
Porem salvar acho que estou fazendo uma “lambança”

Porem salvar estou fazendo assim: pessoaManager.persist(pessoa); pessoaResidencial.setPessoa(pessoa.getCodPessoa()); pessoaManager.persist2(pessoaResidencial);

OBS: O id de PessoaResidencial, é o mesmo do gerado pelo Pessoa.
Mas o que me deixa “encucado” é que tem o mapeamento que tras tudo preenchido, e pensei que para salvar, fosse so necessario salvar em um dos dois.Exemplo criando uma pessoa ele salvaria automaticamente uma pessoaResidencial, ou vice e versa…

Forte Abracao galera!

6 Respostas

F

Olá,

Só isso nao funciona?

pessoaResidencial.setPessoa(pessoa); pessoaManager.persist(pessoaResidencial);

]['s

A

Mais eu preciso pegar o Id da pessoa salva no bd

F

Porque?

]['s

A

Porque o id do PessoaResidencial nao é auto increment.
Tenho que passar o mesmo valor(id) que o Pessoa recebeu

public class PessoaResidencial implements Serializable { @Id private Integer pessoa;
É um integer.

Fabio, voce tem uma ideia melhor desse mapeamento?

F

afsrj:
Porque o id do PessoaResidencial nao é auto increment.
Tenho que passar o mesmo valor(id) que o Pessoa recebeu

public class PessoaResidencial implements Serializable { @Id private Integer pessoa;
É um integer.

Fabio, voce tem uma ideia melhor desse mapeamento?

Entao teu relacionamento é de Pessoa para PessoaResidencial concorda?

Muda o mapeamento para ele ser tratado assim e deixa que o Hibernate cuida do id pra ti fazendo a persistencia como eu sugeri.

]['s

A

Entendi...
Mas 'acredito' que a modelagem desse banco esteja errado. Mas nao posso alterar o bd =/

Tabela esta assim:
[ Pessoa ]   <Table>  
id <Column>  <PK>  
nome          <Column>  
    
  ---------------------------  
    
[ PessoaResidencial ]   <Table>  
id        <Column>  <PK>  <FK -> id [ Pessoa] >  
endereco            <Column>

Ou seja toda vez que voce adiciona uma Pessoa, o mesmo ID é usado em um para adicionar no PessoaResidencial, ou seja o ID em pessoaResidencial é um PK e um FK.
Confuso mesmo para olhar assim, mas o projeto ja existe e eu so estou indo para o hibernate.
Exemplo:
Cadastro da pessoa Fabio Patricio.
foi gerado automaticamente um id 200(auto-increment) para voce na tabela pessoa. Esse mesmo ID é usado para "garantir" um relacionamento com voce na pessoa residencial.

Flw Amigo...

Criado 15 de janeiro de 2007
Ultima resposta 17 de jan. de 2007
Respostas 6
Participantes 2