Pessoal é o seguinte eu tenho uma entidade Questão e uma entidade alternativa, um questão possuí várias alternativas e uma alternativa possuí apenas uma Questão. O problema é
que quando vou atualizar um registro por meio do browser rodando a aplicação o java me lança essa exceção usando a instrução update.
org.hibernate.noUniqueObjectException.
Quado eu uso o merge os dados são atualizados entretanto na tabela alternativa ele insere novos registros com a informação atualizada ou seja ele replica a informação
com uma nova primary key. Vou postar aqui meu mapeamento e métodos usados não sei mais o que fazer e realmente agradeceria muito se alguém pude-se me ajudar
com esse problema.
Mapeamento Questão
@Entity
@Table(name = "questao")
public class Questao {
@OneToMany(mappedBy = "questao", cascade = CascadeType.ALL)
private Collection<Alternativa> alternativas;
}
Mapeamento Alternativa
@Entity
@Table(name = "Alternativa")
public class Alternativa {
@ManyToOne
@JoinColumn(name = "idQuestao")
private Questao questao;
}
Método atualizar
public void atualizarQuestao(String idQuestao, Questao questao) {
for(Alternativa alternativa:questao.getAlternativas()){
alternativa.setQuestao(questao);
alternativa.setStatus(true);
}
session=CreateSessionFactory.openSession();
tx = session.beginTransaction();
session.merge(idQuestao, questao);
tx.commit();
session.close();
}
E antes de tudo eu chamo esse método aqui antes de chamar o atualizar para que ele liste todas as questões de um determinado professor e assim eu possa escolher qual registro
eu devo atualizar não se o problema têm alguma coisa haver com isso mas se houver tá ae o método. tb.
@SuppressWarnings("unchecked")
public Collection<Questao> listarQuestao(String tipo, String criterio) {
session = CreateSessionFactory.openSession();
List c = session.createCriteria(Questao.class).add(
Restrictions.like(tipo, criterio, MatchMode.ANYWHERE).ignoreCase())
.add(Restrictions.eq("status", true)).list();
return c;
}
agradeço muito pessoal não sei como resolver e já procurei muito tentando uma solução..