Saudações!
Bem, estou tendo problemas com mapeamentos bidirecionais utilizando o annotations… segue o exemplo de aplicação:
Classe pessoa
@Entity
@Table(name = “pessoa”)
public class Pessoa implements Serializable
{
private static final long serialVersionUID = -2386914084212703146L;
private int codigo;
private String nome;
private List<Telefone> telefones = new LinkedList<Telefone>();
@OneToMany(cascade = { CascadeType.ALL })
@JoinColumn(name = “cd_pessoa”)
public List<Telefone> getTelefones()
{
return telefones;
}
public void setTelefones(List<Telefone> telefones)
{
this.telefones = telefones;
}
@SequenceGenerator(name = “SEQ_PESSOA”, sequenceName = “seq_pessoa”)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “SEQ_PESSOA”)
@Column(name = “CD_PESSOA”)
public int getCodigo()
{
return codigo;
}
public void setCodigo(int codigo)
{
this.codigo = codigo;
}
@Column(name = "NM_PESSOA")
public String getNome()
{
return nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
}
Classe Telefone
@Entity
@Table(name = “telefone”)
public class Telefone implements Serializable
{
private Pessoa pessoa;
private static final long serialVersionUID = 3258517279673966937L;
private int codigo;
private String telefone;
@Id
@SequenceGenerator(name = “SEQ_TELEFONE”, sequenceName = “seq_telefone”)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “SEQ_TELEFONE”)
@Column(name = “CD_TELEFONE”)
public int getCodigo()
{
return codigo;
}
public void setCodigo(int codigo)
{
this.codigo = codigo;
}
@Column(name = “NU_TELEFONE”)
public String getTelefone()
{
return telefone;
}
public void setTelefone(String telefone)
{
this.telefone = telefone;
}
@ManyToOne
@JoinColumn(name = “cd_pessoa”)
public Pessoa getPessoa()
{
return pessoa;
}
public void setPessoa(Pessoa pessoa)
{
this.pessoa = pessoa;
}
}
Problema:
A tabela telefone possui um código de pessoa. Entretanto, com o mapeamento @OneToMany da classe pessoa, não consigo ao salvar o objeto pessoa passar esse código para a tabela telefone…
Tentei um mapeamento @JoinTable na classe pessoa, da seguinte maneira:
@OneToMany
@JoinTable(name = “telefone”,
joinColumns = @JoinColumn(name = “cd_pessoa”),
inverseJoinColumns = @JoinColumn(name = “cd_telefone”))
Mas mesmo assim, para cadastrar um telefone eu preciso fazer o seguinte:
Pessoa pessoa = new Pessoa();
pessoa.setNome(“Novo”);
pessoa.setEmail("novo@novo.com");
pessoa.setSobre(“novo sobre”);
Telefone tel = new Telefone();
tel.setTelefone(“222-0222”);
pessoa.getTelefones().add(tel);
tel.setPessoa(pessoa); <<<< Nao deveria ser necessário
sessao.beginTransaction();
sessao.saveOrUpdate(pessoa);
sessao.getTransaction().commit();
Alguém pode ajudar???