Integridade referencial

2 respostas
diogoprosoft

Pessoal ainda não consegui resolver esse problema!!! :frowning:

Tenho um relacionamento OneToOne, da tabela Pessoa e Endereco

Classe Endereco

@Entity
@Table(name="endereco")
public class Endereco {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="endereco_sequence_generator")
    @SequenceGenerator(name="endereco_sequence_generator", sequenceName="seq_endereco",allocationSize= 1)
    @Column(name="id", nullable= false)
    private Long id;
    
    private String logradouro;
    
    private String numero;
    
    private String complemento;
    
    @OneToOne
    @JoinColumn(name = "pessoa_id", referencedColumnName="id")
    private Pessoa pessoa;

Classe Pessoa

@Entity
@Table(name="pessoa")
public class Pessoa {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pessoa_sequence_generator")
    @SequenceGenerator(name="pessoa_sequence_generator", sequenceName="seq_pessoa",allocationSize= 1)
    @Column(name="id", nullable= false)
    private Long id;
    
    @Column(name="nome", nullable= false)
    private String nome;

Aqui eu gravo no banco

public class AdicionaPessoaEndereco {

     public static void main(String[] args) throws Exception {
        Session session = new HibernateFactory().getSession();
        Pessoa pessoa = new Pessoa();
        Endereco endereco = new Endereco();
                
        pessoa.setNome("diogo");
        
        endereco.setLogradouro("Rua a");
        endereco.setNumero("32");
        endereco.setComplemento("xxxxxxxx");         
        
        Transaction t = session.beginTransaction();
        session.saveOrUpdate(pessoa);
        session.saveOrUpdate(endereco);
        t.commit();
        System.out.println("Gravado com sucesso");
        System.out.println("ID do pessoa: " + pessoa.getId());
        System.out.println("ID do endereco: " + endereco.getId());
        session.close();
     }
    
}

Agora a explicação da minha dúvida

Preciso fazer com que eu gravar no banco o id da Pessoa apareca na tabela Endereco sem eu precisar colocar, tipo automático, derepente usando um get mais não estou conseguindo fazer isso

O QUE POSSO FAZER???

2 Respostas

Rapapel
vc faz endereco.setPessoa(Pessoa);

salva o endereço

session.saveOrUpdate(endereco);

Com:

CascadeType.SAVE_UPDATE

no atributo pessoa da classe Endereco

Depende do contexto da sua aplicação, mas acho que vc deveria ter uma refeência para o objeto Endereco na classe Pessoa. Mas depende da sua aplicação.

diogoprosoft

Obrigado Consegui, valeu mesmo!!!

Criado 3 de junho de 2008
Ultima resposta 3 de jun. de 2008
Respostas 2
Participantes 2