Não deleta relacionamento

2 respostas
heatcold
Quando eu tento:
regra = grupo.getRegras().remove(i);
tx = HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
factory.getRegraDAO().delete(regra);
factory.getGrupoDAO().update(grupo);
tx.commit();
Recebo esta excecao:
Exception occurred during event dispatching:
org.hibernate.exception.GenericJDBCException: could not update collection rows: [especialista.regra.Grupo.regras#1]
Mapeamentos:
<class name="especialista.regra.Grupo"
           table="GRUPOS">
       
        <id
            name="id"
            column="GRUPO_ID">
            <generator class="increment"/>
        </id>
       
        <list name="regras">
            <key column="GRUPO_ID"/>
            <list-index base="0"/>
            <one-to-many class="especialista.regra.Regra"/>
        </list>
       
        <property name="nome" column="NOME_GRUPO"/>               
       
</class>
<class name="especialista.regra.Regra"
           table="REGRAS">
       
        <id
            name="id"
            column="REGRA_ID">
            <generator class="increment"/>
        </id>
       
        <many-to-one
            name="grupo"
            class="especialista.regra.Grupo"
            not-null="true"
            column="GRUPO_ID"/>
       
        <many-to-one
            name="conclusao"
            class="especialista.regra.Clausula"
            cascade="all"
            not-null="true"
            lazy="false"/>
       
        <list name="antecedentes" cascade="all" lazy="false">
            <key column="REGRA_ID"/> 
            <list-index base="0"/>
            <one-to-many class="especialista.regra.Clausula"/>
        </list>
       
        <property name="nome" column="NOME_REGRA"/>
        <property name="descricao" column="DESCRICAO_REGRA"/>         
        <property name="confianca" column="CONFIANCA_REGRA"/>   
        <property name="tipo" column="TIPO_REGRA"/>
        <property name="estado" column="ESTADO_REGRA"/>         
</class>
Alguem pode me ajudar?

2 Respostas

P

Acredito que o problema esteja no relacionamento entre Regra e Antecedente. Tente mudar o seu mapeamento de

<list name="antecedentes" cascade="all" lazy="false">   
            <key column="REGRA_ID"/>   
            <list-index base="0"/>   
            <one-to-many class="especialista.regra.Clausula"/>   
</list>

para

<list name="antecedentes" cascade="all-delete-orphan" lazy="false">   
            <key column="REGRA_ID"/>   
            <list-index base="0"/>   
            <one-to-many class="especialista.regra.Clausula"/>   
</list>
heatcold

Problema resolvido mudando os mapeamentos:

<list name="regras" cascade="delete">
            <key column="GRUPO_ID"/>
            <list-index base="0"/>
            <one-to-many class="especialista.regra.Regra"/>
</list>
<many-to-one
            name="grupo"
            class="especialista.regra.Grupo"
            cascade="save-update"
            not-found="ignore"
            column="GRUPO_ID"/>

O codigo abaixo funciona:

tx = HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
List grupos = factory.getGrupoDAO().list();
Grupo grupo = (Grupo) grupos.get(0);
       
tx = HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
Regra regra = grupo.getRegras().remove(0);
tx.commit();
Criado 14 de março de 2008
Ultima resposta 14 de mar. de 2008
Respostas 2
Participantes 2