Hibernate/JPA tenta atualizar uma chave para null ao excluir um item de uma lista

0 respostas
wescleyfcosta

Olá,

Eu tenho uma classe que possui um mapeamento do hibernate para um lista de outra entidade, sendo que a ordem que os elementos são criados é
persistida também através da tag "list-index", conforme demonstrado abaixo:

<list name="turnoAulas" batch-size="10" table="TurnoAula"
            lazy="false" cascade="all">
            
		<key column="tau_IDTurno" foreign-key="tau_fkTurno" not-null="true"/>
		<list-index column="tau_Ordem"/>
		
		<one-to-many
			class="br.com.ultramax.gestaoescolar.core.domain.TurnoAula"/>
</list>
public List<TurnoAula> getTurnoAulas() {
	return turnoAulas;
}

Quando tento remover um elemento da lista, como por exemplo, com o teste abaixo, tudo funciona corretamente

public void testRemoverTurnoAula() throws ValidationRuleException {
		TurnoVO vo = getVO();
		final int antes = vo.getTurnoAulas().size();
		Integer id = getModel().adicionar(vo);
		Turno t = getModel().findByPrimaryKey(id);
		t.getTurnoAulas().remove(0);
		getModel().atualizar(t);
		t = getModel().findByPrimaryKey(id);
		assertEquals(antes - 1, t.getTurnoAulas().size());
}

Mas ao converter o mapeamento, antes feito em Hibernate para JPA 2, o teste acima não funciona quando tento excluir um elemento da lista,
por algum motivo, o hibernate cria um update antes da exclusão do elemento que tenta atualizar o indice e a chave da tabela em questão para null,
mas como a chave dessa tabela não aceita null é lançada uma exceção (exemplos abaixo), Alguém saberia dizer pq hibernate tenta atualizar esse campo para null?

Novo mapeamento com JPA 2
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@OrderColumn(name = "tau_Ordem", nullable = false)
@JoinColumn(name = "tau_IDTurno")
@ForeignKey(name = "tau_fkTurno")
public List<TurnoAula> getTurnoAulas() {
	return turnoAulas;
}
Update gerado pelo hibernate durante a exclusão de um elemento da lista
update
        TurnoAula 
    set
        tau_IDTurno=null,
        tau_Ordem=null 
    where
        tau_IDTurno=? 
        and tau_ID=?
java.sql.BatchUpdateException: Cannot add or update a child row: a foreign key constraint fails
Criado 5 de janeiro de 2011
Respostas 0
Participantes 1