Annotations one-to-many

Boa tarde a todos, comecei a estudar hibernate agora e estou encontrando algumas conplicações , gostaria de saber como resolver esse problema

Tenho duas classes Entity

[size=18]Classe Pessoas[/size]

@Entity
@Table(name="pessoas")
public class Pessoa implements Serializable
{
 @Id
 private int id_pessoa;
 @Column(name="nome_pessoa", length=40)
 private String nome_pessoa;
 @OneToMany(cascade= javax.persistence.CascadeType.ALL, mappedBy = "pessoa")
 @Cascade(CascadeType.ALL)
 private Collection<Endereco> endereco;[/code]

[b][size=18]Classe Endereco[/size][/b]
[code]@Entity
@Table(name="endereco")
public class Endereco implements Serializable {
 @Id
 private int id_endereco;
 @Column(name="desc_endereco", length=50)
 private String desc_endereco;
@ManyToOne
@Cascade(CascadeType.ALL)
private Pessoa pessoa;[/code]

Quando eu vou gravar com a classe para gravação:

[b][size=18]Classe Grava [/size][/b]

[code]public class GravaPessoaEndereco
{
  public static void main(String[] args)
  {
      try{
         AnnotationConfiguration cfg = new AnnotationConfiguration();
         cfg.addAnnotatedClass(Pessoa.class);
         cfg.addAnnotatedClass(Endereco.class);
         SessionFactory fabrica = cfg.buildSessionFactory();
         Session sessao = fabrica.openSession();
         Transaction tx_pessoa = sessao.beginTransaction();

         Pessoa obj_pessoa = new Pessoa();
         obj_pessoa.setNome_pessoa("Diogo22");
         obj_pessoa.setId_pessoa(1);

         Endereco obj_endereco = new Endereco();
         obj_endereco.setId_endereco(1);
         obj_endereco.setDesc_endereco("Rua 1");
         obj_endereco.setPessoa(obj_pessoa);
     
           Endereco obj_endereco2 = new Endereco();
         obj_endereco.setId_endereco(2);
         obj_endereco.setDesc_endereco("Rua 2");
         obj_endereco.setPessoa(obj_pessoa);


        obj_pessoa.setEndereco(new HashSet<Endereco>());
        obj_pessoa.getEndereco().add(obj_endereco);
        obj_pessoa.getEndereco().add(obj_endereco2);


          sessao.save(obj_pessoa);
          tx_pessoa.commit();
          sessao.close();

      }catch(Exception erro){
         JOptionPane.showMessageDialog(null, "Erro na inserção: " + erro);
         System.out.println("Er: "+ erro);
      }
  }
}

O endereço é gravado assim no banco

Ja o cliente é gravado corretamente

Minhas duvidas são:
Porque não esta gravando corretamente?
É necessario ter Many to one e One to many para fazer essa relação de tabela onde uma pessoa pode ter varios endereços?
Existe um meio melhor para fazer isso?

Muito obrigado a todos

[size=18]Tentei fazer outro exemplo com clientes e telefones[/size]

Classe Cliente

[code]@Entity
@Table(name=“clientes”)
public class Clientes implements Serializable {
@Id
private Integer id;
@Column(name=“nome”)
private String nome;
@OneToMany( mappedBy= “clientes”,cascade= javax.persistence.CascadeType.ALL)

private Set<Telefones> telefones;[/code]

Classe Telefone

[code]@Entity
@Table(name=“telefones”)
public class Telefones {
@Id
private Integer Id;
@Column
private String telefone;
@ManyToOne(cascade=javax.persistence.CascadeType.ALL)

private Clientes clientes;
[/code]

Classe Cadastrar

[code]public class Cadastrar {
public static void main(String args[])
{
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Clientes.class);
cfg.addAnnotatedClass(Telefones.class);
SessionFactory fabrica = cfg.buildSessionFactory();
Session sessao = fabrica.openSession();
Transaction tx_cadast = sessao.beginTransaction();
Clientes cliente = new Clientes();
cliente.setId(1);
cliente.setNome(“Diogo”);

Telefones tel1 = new Telefones();
tel1.setId(1);
tel1.setTelefone(“1111”);

Telefones tel2 = new Telefones();
tel2.setId(2);
tel2.setTelefone(“2222”);

cliente.setTelefones(new HashSet());
cliente.getTelefones().add(tel1);
cliente.getTelefones().add(tel2);
sessao.save(cliente);
tx_cadast.commit();
sessao.close();
}
}
[/code]

E No fim nao grava o id do telefone
Alguem me ajuda ://///

[quote=tioola][code]
Endereco obj_endereco = new Endereco();
obj_endereco.setId_endereco(1);
obj_endereco.setDesc_endereco(“Rua 1”);
obj_endereco.setPessoa(obj_pessoa);

      Endereco obj_endereco2 = new Endereco();
     obj_endereco.setId_endereco(2);
     obj_endereco.setDesc_endereco("Rua 2");
     obj_endereco.setPessoa(obj_pessoa);

[/code]
[/quote]

Oberva bem esta parte do código e descobres o teu problema…

[quote=pmlm][quote=tioola][code]
Endereco obj_endereco = new Endereco();
obj_endereco.setId_endereco(1);
obj_endereco.setDesc_endereco(“Rua 1”);
obj_endereco.setPessoa(obj_pessoa);

      Endereco obj_endereco2 = new Endereco();
     obj_endereco.setId_endereco(2);
     obj_endereco.setDesc_endereco("Rua 2");
     obj_endereco.setPessoa(obj_pessoa);

[/code]
[/quote]

Oberva bem esta parte do código e descobres o teu problema…[/quote]

Você esta se refirindo ao meu obj_endereco.setPessoa(obj_pessoa);??

Ja tentei tirar e colocar, mas continua a mesma coisa

se não for isso eu ficaria muito grato com sua explicação

Tu crias o obj_endereco2 mas depois fazes os sets todos em obj_endereco

Entendi o exemplo 1 obrigado.

e quanto ao segundo exemplo, porque não grava o ID?