Hibernate + Annotations + Mapeamentos

0 respostas
V

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(<a>"[email removido]</a>");

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???

Criado 26 de julho de 2006
Respostas 0
Participantes 1