Hibernate, recuperar: ok. salvar: fail

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!

Olá,

Só isso nao funciona?

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

]['s

Mais eu preciso pegar o Id da pessoa salva no bd

Porque?

]['s

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?

[quote=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?[/quote]

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

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

Tabela esta assim:

[code][ Pessoa ]


id
nome

[ PessoaResidencial ]


id <FK -> id [ Pessoa] >
endereco [/code]

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…