Estou utilizando o XDoclet, Hibernate com Mysql.
Crei duas classes pai(Usuario) - filha(Sistema) na classe pai declarei o seguinte:
/**
* @hibernate.list
* cascade=“all”
* @hibernate.collection-one-to-many
* class=“acesso.Sistema”
* @hibernate.collection-index
* column=“idIndice”
* @hibernate.collection-key
* column=“idUsuario”
para apagar um sistema fiz este método:
public boolean apagaSistema(Sistema vSis) {
try {
sessao = sf.openSession();
trans = sessao.beginTransaction();
sessao.delete(vSis);
trans.commit();
System.out.println("Apaga sistema. "+vSis.getSigla());
return true;
} catch (HibernateException e) {
return false;
}
}
A inclusão funciona beleza, mas quando vou deletar um sistema o campo
idIndice não se refaz. Irei exemplificar:
Incluir 3 registros em sistemas para um determinado Usuario então o idIndice do último registro fica igual a 2 (começa em zero), quando eu excluo o 2o. registro deveria o list.size() ser igual a 2, mas ele devolve 3, pois ele pega o valor do idIndice+1 do último Sistema para um determinado Usuario.
Como faço para apagar sistema atualizando o idIndice ?
Obrigado pelo interesse.
Tentarei ser mais claro. Quando você cria o relacionamento acima descrito com Hibernate utilizando uma Lista, ele criará uma coluna na tabela do banco de dados para controle de índice. @hibernate.collection-index column=“idIndice”
A tabela Sistema(filha) é agrupada por Usuario(pai), então esta coluna
idIndice é vinculada ao Usuario (pai), ou seja, quando um novo Usuario é
criado esta coluna começa do 0 (zero).
Note que o Usuario 1 tem somente agora 2 sistemas, e o idIndice ficou
uma brecha. Quando vou carregar uma List dos Sistemas do Usuário 1 o método List.size fica igual a 3 pois retorna o valor do último idIndice+1 do usuário 1, mesmo ele tendo apenas dois registros vinculados a ele.
Se eu alterar na munheca o idIndice do registro 3 para 99, ele retornaria
List.size() = 100
Estou usando o struts quando vou listar o conteúdo dos classe Sistema(filha) carrego ela em uma List, na hora
que vou mostrá-la uso logic:iterate do Struts, ele varre uma List do início até o
tamanho dela (List.size), então utilizando o exemplo acima ele fará um
loop três vezes sendo que deveria rodar somente duas vezes, pois só
existe 2 sistemas para o Usuario 1.
Como faço para apagar um registro utilizando o Hibernate que atualize
esta coluna de índice?
Qualquer outro solução será muito bem-vinda.
Agradeço desde já o seu interesse.