Estou com esse erro numa tela tipo wizard. A questão é que eu simplesmente não sei o que está disparando isso, pois não estou acessando o hibernate diretamente. Já vi em alguns fóruns falando pra dar um session.clear()
mas pra mim não faz sentido, já que o seam gerencia(ou ao menos deveria gerenciar) a sessão pra mim. Eu creio que tenha a ver com o contexto de conversação, mas é só uma suspeita.
Alguém tem alguma dica ?
kra oq eu posso te dizer é … use o spring para controlar isso pra vc …
ai n tem perigo
Apesar de ainda não saber a origem do problema, segui a orientação relacionada ao hibernate.
No método eu coloquei a annotation:
@Begin(join = true, flushMode = FlushModeType.MANUAL)
E no método de salvar eu recuperei a instância do entityManager e dei um flush(). Parece que funcionou, mas é meio chutômetro…
Você não poderia postar o código?
Infelizmente o erro voltou a acontecer
Vou postar o código para vocês olharem:
/**
* @description Metodo que carrega a instancia do Home com os objetos dos
* grids da tela antes de persistir
*/
public void homeForEntity() {
new UtilReference<PrestacaoConta>().atualizarReferencia(getInstance()
.getDataPrestacaoConta(), itensDataPrestacaoConta);
}
/**
* @description Metodo que persiste
*/
@Override
@End
public String persist() {
this.homeForEntity();
if (isValido()) {
String persist = super.persist();
getPersistenceContext().flush();
return persist;
}
return null;
}
/**
* @description Utilitário para atualizar as referências
*/
public class UtilReference<E> {
public void atualizarReferencia(List<E> anterior, List<E> atual) {
for (Iterator<E> itAnterior = anterior.iterator(); itAnterior.hasNext();) {
E i = itAnterior.next();
if (!atual.contains(i)) {
itAnterior.remove();
}
}
for (E at : atual) {
if (!anterior.contains(at)) {
anterior.add(at);
}
}
}
}
Off-topic: Esse layout do GUJ é familiar… Acho que era do CSS3.info rsrsrsrs
Esse foi um problema que deixei de lado, mas parando pra olhar agora com mais calma, provavelmente o erro ocorreu porque o código copiava ítens de um List para outro. Isso deve deixar o hibernate confuso…