ConcurrentModificationException no Hibernate

Olá Pessoal,

Queria ver com vocês se podem me dar uma ajuda.

No seguinte código

        Iterator lista = this.getComandosPendentes().iterator();

        logger.info( "Iniciando passagem do usuário " + this.nick );

            while( lista.hasNext() )
            {
                logger.info( "\tPassando por um comando do usuário." );
                AbstractCommandTurno temp = ( AbstractCommandTurno ) lista.next();
                temp.passaTurno();
            }

Na linha AbstractCommandTurno temp = ( AbstractCommandTurno ) lista.next();

Acontece o seguinte erro:

java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
    at java.util.HashMap$KeyIterator.next(Unknown Source)
    at org.hibernate.collection.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:555)
    at Jogador.passaTurno(Jogador.java:539)
    at Usuario.passaTurno(Ticker.java:111)
    at Ticker.run(Ticker.java:79)

Alguém sabe o que pode ser?
Uma coisa que eu posso garantir é que não há nenhuma outra thread minha em execução no momento em que esta é executada. Eu sei disso pq eu bloqueio qualquer solicitação http que aconteça no momento que essa thread acorda.

Outra coisa importante, se eu debugo, e dou um tempo entre uma iteração e outra, não dá erro! Só se eu deixo executar ou se eu vou muito rápido nos passos.

Alguém tem alguma idéia do que pode ser?

acho que se vc faz o loop usando iterator nao pode modificar o objeto enquanto lê.

Hmm e como eu poderia fazer um loop e poder editar os objetos?

O engraçado é que isso é meio aleatório, as vezes funciona, as vezes não.

tenta ler usando apenas um FOR normal.
Tenho quase certeza que se vc usa iterator vc nao pode alterar (temp.passaTurno():wink: os objetos enquanto lê.

Cara, agora eu vi aqui…

Tipo, esse iterator não é obtido através de uma consulta HQL. Na verdade, é obtido através de um Set que é uma collecion minha que armazena comandos e está mapeada no banco de dados.

Pelo set, pelo que eu vi nos métodos, além do iterate, eu só teria o “toArray()” e eu nem sei se ele é pra isso mesmo.

É por ai mesmo?