Boa tarde!
Tenho duas entidade que se relacionam (Atividade e Questao). Na Atividade tenho um método que adiciona questões (adicionaQuestao). Eu precisaria saber o id que “questao” recebe após atividade ser persistida.
Exemplo:
Questao questao = new Questao...
AtividadeDAO atividadeDAO = new AtividadeDAO(); // EntityManager injetado no objeto
Atividade atividade = atividadeDAO.busca(atividadeId);
atividade.adicionaQuestao(questao); // << aqui - o id que "questao" vai ganhar...
atividadeDAO.salvar(atividade);
No primeiro momento pensei que o objeto “questao” receberia o id após atividade ser salva (merge, nesse caso), mas não, o id permanece null.
No primeiro momento imaginei que seria como o caso de uma única entidade sendo persistida, como o exemplo abaixo:
Atividade atividade = new Atividade();
atividade.set...
AtividdeDAO atividadeDAO = new AtividadeDAO();
atividadeDAO.salvar(atividade); // aqui "atividade" recebe um id
Parte das entidades das quais falei:
@Entity
@Table(name = "atividades")
public class Atividade {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@NotNull
private String descricao;
@OneToMany(mappedBy = "atividade", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
private List<Questao> questoes = new ArrayList<>();
// mais métodos e atributos
public void adicionaQuestao(Questao questao) {
this.questoes.add(questao);
questao.setAtividade(this);
}
}
@Entity
@Table(name = "questoes")
public class Questao {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@NotNull
private String enunciado;
@ManyToOne(optional = false)
@JoinColumn(name = "atividade_id", nullable = false)
private Atividade atividade;
// mais métodos e atributos
public void setAtividade(Atividade atividade) {
this.atividade = atividade;
}
}
Será que pra conhecer o id que questao recebe vou precisar fazer o procedimento de persistência exclusivamente para a entidade questao por fora (sem usar o adicionaQuestao da entidade Atividade)?
Tipo o seguinte:
questaoDAO.salvar(questao);
?
Desde já agradeço