Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Persistência em um relacionamento OneToMany

Bom dia galera,

eu tenho o seguinte mapeamento bilateral OneToMany e ManyToOne:

Pessoa:

@Entity
@Table(name = "tb_pessoa")
public class Pessoa implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_tb_pessoa")
    private Integer id;

    private String nome;

    @OneToMany(mappedBy = "pessoa", cascade = {CascadeType.PERSIST})
    private List<Contato> contatos;
}

Contato:

@Entity
@Table(name = "tb_contato")
public class Contato implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_tb_contato")
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "fk_tb_pessoa", nullable = false)
    private Pessoa pessoa;

    private String descricao;
}

A minha dúvida é a seguinte, quando é tento persistir pelo lodo fraco do relacionamento Pessoa da seguinte forma:

Contato c  = new Contato();
c.setDescricao("(99) 99999-9999");

Pessoa p = new Pessoa();
p.setNome("Fulano");
p.contatos.add(c);

tenho uma ConstraintViolationException, ou seja, estou violando uma restrição porque eu não posso adicionar um contato sem uma pessoa. Para resolver isso tenho que setar a pessoa do meu contato manualmente assim:

Contato c  = new Contato();
c.setDescricao("(99) 99999-9999");

Pessoa p = new Pessoa();
p.setNome("Fulano");

//Setando manualmente
c.setPessoa(p);

p.contatos.add(c);

Tem alguma forma que eu possar automatizar isso, sem precisar ter que setar a pessoa manualmente?

Espero ter sido claro, Desde já obrigado pelas respostas.

2 respostas
solução!

Oi João, infelizmente, ou felizmente, não. A ideia é que você controle seu código mesmo e chame tudo necessário para ele funcionar.

Foi o que eu pensei, obrigado!