Olá, pessoal estou com um problema aqui estudando o hibernate, meu caso é o seguinte, tenho as classes mapeadas da seguinte forma:
@Entity
public class Questao {
@Id
@GeneratedValue
private Long id;
private String descricao;
@OneToMany(mappedBy = "questao")
private List<Pergunta> perguntas = new ArrayList<Pergunta>();
public Questao(String descricao) {
this.descricao = descricao;
}
}
@Entity
public class Resposta {
@Id
@GeneratedValue
private Long id;
private String descricao;
@ManyToMany(mappedBy = "respostas")
private List<Pergunta> perguntas = new ArrayList<Pergunta>();
public Resposta(String descricao){
this.descricao = descricao;
}
public void addPergunta(Pergunta pergunta){
this.perguntas.add(pergunta);
}
}
@Entity
public class Pergunta {
@Id
@GeneratedValue
private Long id;
private Integer pontos;
@ManyToOne
@Cascade(CascadeType.SAVE_UPDATE)
private Questao questao;
@ManyToMany
@Cascade(CascadeType.SAVE_UPDATE)
private List<Resposta> respostas = new ArrayList<Resposta>();
public Pergunta(Integer pontos, Questao questao){
this.pontos = pontos;
this.questao = questao;
}
public void addResposta(Resposta resposta){
this.respostas.add(resposta);
}
public List<Resposta> getRespostas() {
return respostas;
}
public void setRespostas(List<Resposta> respostas) {
this.respostas = respostas;
}
}
Então executo o seguinte código:
public class Inicio {
public static void main(String[] args) {
Session session = HibernateUtil.getSession();
Dao<Pergunta> perguntaDao = new Dao<Pergunta>(session, Pergunta.class);
Pergunta pergunta = new Pergunta(10, new Questao("Cadastrado?"));
pergunta.addResposta(new Resposta("Sim"));
pergunta.addResposta(new Resposta("Não"));
System.out.println(pergunta.getRespostas().toString());
perguntaDao.save(pergunta);
}
}
Os dados são inseridos corretamente em todas tabelas, exceto na Pergunta_Resposta. Alguém tem idéia se faltou algum tipo de configuração?
@Edit
[b]
Só para atualizar e facilitar para os demais.
Solução de MarcioTavares
Ao usar tabelas transacionais, você precisa abrir uma transação antes de usar o DAO e, após usá-lo, dar o commit. [/b]