Esse problema começou a correr quando passei a utilizar o pattern (Open Session In View). E ocorre quando temos uma collection, por exemplo, em um relacionamento @OneToMany.
No meu caso, quando eu adicionava um objeto a collection dava tudo certo:
public void saveMensagem(ActionEvent event){
dao = new ChamadoDao<Chamado>(HibernateUtil.getSession(),Chamado.class);
try{
mensagem.setChamado(chamado);
mensagem.setUsuario(LoginMB.getUsuarioLogado());
chamado.getMensagens().add(mensagem);
dao.update(chamado);
}catch (Exception e) {
e.printStackTrace();
}
}
O problema ocorria quando eu fazia um update no objeto que contem a collection, sem fazer alterações na mesma:
public void save(ActionEvent event){
dao = new ChamadoDao<Chamado>(HibernateUtil.getSession(),Chamado.class);
try{
if(chamado.getUsuario() == null){
chamado.setUsuario(LoginMB.getUsuarioLogado());
dao.save(chamado);
}else{
dao.update(chamado);
}
}catch (Exception e) {
e.printStackTrace();
}
}
Para resolver o problema eu mudei de session.update para session.merge:
public void save(ActionEvent event){
dao = new ChamadoDao<Chamado>(HibernateUtil.getSession(),Chamado.class);
try{
if(chamado.getUsuario() == null){
chamado.setUsuario(LoginMB.getUsuarioLogado());
dao.save(chamado);
}else{
dao.merge(chamado);
}
}catch (Exception e) {
e.printStackTrace();
}
}
Assinar:
Postar comentários (Atom)
VALEU VELHO SALVOU MEU DIA.
ResponderExcluirtallescdc@gmail.com.
obrigado dr.
Salvou meu dia tbm!
ResponderExcluirObrigado!
E na exclusão?
ResponderExcluirpublic void saveMensagem(ActionEvent event){
ResponderExcluirdao = new ChamadoDao(HibernateUtil.getSession(),Chamado.class);
try{
mensagem.setChamado(chamado);
mensagem.setUsuario(LoginMB.getUsuarioLogado());
chamado.getMensagens().remove(mensagem);
dao.update(chamado);
// ou dao.merge(chamado);
}catch (Exception e) {
e.printStackTrace();
}
}
O relacionamento deve estar corretamente mapeado para exclusão:
Ex:
@OneToMany(mappedBy="movimento", cascade = CascadeType.ALL ,orphanRemoval=true)
private Collection lancamentos;
Bom dia, Estou com o mesmo problema para exclusão.
ResponderExcluirPorem não tem esse "orphanRemoval".
como posso resolver?
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
ResponderExcluir