Problema JPA chave estrangeira!

bem pessoal eu tenho duas entidades Pessoa e Fone tentando fazer uma persistencia utilizando JPA onde:

[code]@Entity
public class Pessoa {

@Id private int id;
private String nome;
private String informacoes;
@OneToMany(cascade=CascadeType.ALL, mappedBy="pessoa")
private Set<Fone> fones = new HashSet<Fone>();

public Pessoa() {
	
}

…[/code]

[code]@Entity
public class Fone {
@Id
private int id;
private String nome;
private String numero;
@ManyToOne
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Pessoa pessoa;

public Fone(){
}

public Fone(String nome, String numero) {
	this.nome = nome;
	this.numero = numero;
}

…[/code]

o banco esta da seguinte forma: A tabela Fone tem uma chave estrangeira pessoa_id da tabela Pessoa

CREATE table fone(
id int not null auto_increment,
pessoa_id int not null,

eu adiciono um ou dois Fone a uma pessoa pessoa.add(fone1) persisto o objeto Pessoa no banco soh q na tabela Fone o campo da chave primaria fica sempre igual a 0,ou seja, n reflete o id real do registro na tabela pessoa Tipo:

Tabela Pessoa

id outros campos
1
2
3

Tabela Fone

id pessoa_id outros campos
1 &nbsp&nbsp&nbsp&nbsp 0
2 &nbsp&nbsp&nbsp&nbsp 0

qualquer q seja a pessoa que adiciona um ou mais Fone o id que dereria ser igual ao do registro da Pessoa fica 0 assim ficando sem referencia.

com estas informacoes alguem pode em ajudar?

Na classe Fone não há referência à tabela pessoa (via Annotations).

Mais informações em http://www.jeebrasil.com.br/mostrar/91.

@Entity
public class Pessoa {

@Id private int id;
private String nome;
private String informacoes;
@OneToMany(cascade=CascadeType.ALL, mappedBy=“pessoa”)
private Set fones = new HashSet();

@Entity
public class Fone {
@Id
private int id;
private String nome;
private String numero;
@ManyToOne
@JoinColumn(name=“pessoa_id”)
private Pessoa pessoa;

public Fone(){
}

eu ja tinah adicionado a linha em negrito soh quem continuou do memso jeito e mesmo q eu a tire o defalut n eh a concatenaçao da propriedade"_" a chave primaria da tabela Pessoa?

na tabela Fone tem um campo pessoa_id, o @JoinColumn(name=“pessoa_id”) nao eh quem faz referencia a tabela Pessoa via anotation?
o campo da chave estrangeira na tabela fone continua apenas tendo valor “0” e valeu pelo exemplo do link mas ele eh JEE esse meu eh JSE tem uns anotation q n serve para ele neh isso?

e agora!?

up

Para usar as anotações do Hibernate, baixe aqui a biblioteca necessária, independente se for JEE ou JSE (apesar que para o ambiente JEE há umas anotações específicas de EJB, mas que não impedem o seu uso em JSE) e adicione ao seu projeto.

Classe Pessoa com campo id AUTO_INCREMENT e mapeadmento 1-n para Fone.

@Entity
public class Pessoa {

 @Id
 @Column(name="pessoa_id") 
 @GeneratedValue(strategy=GenerationType.IDENTITY) 
 private int id;
 private String nome;
 private String informacoes; 
 @OneToMany(cascade=CascadeType.ALL, mappedBy="pessoa")
 private Set<Fone> fones = new HashSet<Fone>();

 public Pessoa() {

 }

 // getter e setter omitidos
}

Classe Fone com com campo id AUTO_INCREMENT e mapeamento n-1 para Pessoa.

 @Entity
 public class Fone {
 @Id
 @Column(name="fone_id")
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private int id;
 private String nome;
 private String numero; 
 @ManyToOne(fetch = FetchType.EAGER)
 @JoinColumn(name="pessoa_id", 
				insertable=true, updatable=true)
 @Fetch(FetchMode.JOIN)
 @Cascade(CascadeType.SAVE_UPDATE)
 private Pessoa pessoa;

 public Fone(){
 }

  public Fone(String nome, String numero) {
   this.nome = nome;
   this.numero = numero;
  } 
 
  // getter e setters omitidos

}

Compare agora.
Sugestão: caso você use Eclipse, baixe o plugin do Hibernate para gerar os Beans com as anotações e os respectivos DAO’s (caso você utilize essa estrutura). É uma ótima fonte de aprendizado.

OK?

E no caso de quando um campo é ao mesmo tempo pk e fk, sendo que não é composta, como fica as anotações?