Update hibernate

0 respostas
V

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..

Criado 27 de junho de 2011
Respostas 0
Participantes 1