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:
[code]
<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"/>
[/code]
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