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      0
2      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!?
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?