Pessoal, tenho um relacionamento many-to-many mapeado assim.
<class name="pacote.LinhaDeDiscussao" table="linhas">
<id name="id" type="int" unsaved-value="null" >
<column name="id_linha" sql-type="int" not-null="true"/>
<generator class="native"/>
</id>
//outras coisas...
<set name="discussoes" table="discussoeslinhas" inverse="true" >
<key column="id_linha" />
<many-to-many column="id_discussao" class="pacote.Discussao" />
</set>
...
e a outra classe:
<class name="pacote.Discussao" table="discussoes" >
<id name="id" type="int" unsaved-value="null" >
<column name="id_discussao" sql-type="int" not-null="true"/>
<generator class="native"/>
</id>
<list name="linhas" table="discussoeslinhas" lazy="false" >
<key column="id_discussao" />
<list-index column="posicao_na_discussao" />
<many-to-many column="id_linha" class="pacote.LinhaDeDiscussao" />
</list>
Como dá para ver, as linhas de uma discussão estão num array, e a posição é armazenada na coluna “posicao_na_discussao”. Durante o processamento, uma linha se altera e por causa disso as linhas são reordenadas e eu tento dar um update na discussão para que os novos índices de posição se reflitam no banco, com esse código:
Iterator it = linha.getDiscussoes().iterator();
while(it.hasNext())
sessao.update((Discussao)it.next());
Mas acontece que não atualiza! Já tentei mudar o estilo de cascade para all, save-update, mas ai dá um erro:
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Alguma idéia?
Valeu.