Hola Diego,

Acá te dejo parte del mapping que me ha traido problemas:

        <class name="Actividad" table="M4_ACTIVIDADES">

                <composite-id name="Id" class="ActividadId">
                        <key-property name="IdPrograma" length="10">
                                <column name="ID_PROGRAMA" 
sql-type="VARCHAR2(10)" />
                        </key-property>
                        <key-property name="IdActividad" length="10">
                                <column name="ID_ACTIVIDAD" 
sql-type="VARCHAR2(10)" />
                        </key-property>
                </composite-id>

                ...

                <bag name="ListaObjetivos" table="M4_ACTIVIDADES_OBJETIVOS"
lazy="true" cascade="all-delete-orphan" inverse="true">
                        <key>
                                <column name="ID_PROGRAMA"/>
                                <column name="ID_ACTIVIDAD"/>
                        </key>
                        <one-to-many class="Objetivo"/>
                </bag>

                ...
        </class>

        <class name="Objetivo" table="M4_ACTIVIDADES_OBJETIVOS">

                <composite-id name="Id" class="ObjetivoId">
                        <key-property name="IdPrograma" length="10">
                                <column name="ID_PROGRAMA" 
sql-type="VARCHAR2(10)" />
                        </key-property>
                        <key-property name="IdActividad" length="10">
                                <column name="ID_ACTIVIDAD" 
sql-type="VARCHAR2(10)" />
                        </key-property>
                        <key-property name="IdObjetivo" length="10">
                                <column name="ID_OBJETIVO" 
sql-type="VARCHAR2(10)" />
                        </key-property>
                </composite-id>

                <property name="NombreEsp">
                        <column name="N_OBJETIVO_ESP" length="100" 
sql-type="VARCHAR2(100)"/
>
                </property>

                ...

        </class>

En este caso, la Actividad la persiste sin problemas, sea un caso o el
otro pero al llegar a la colección de Objetivos no puede determinar
qué debe hacer con cada uno. Desde ya muchas gracias.

Saludos,

Matias.-

On 18 mayo, 08:25, Diego Mijelshon <[email protected]> wrote:
> Matías,
> Mandá un ejemplo de clase padre e hijo con sus mappings con los que tengas
> problemas.
>
>    Diego
>
> 2010/5/18 Matias Veleda <[email protected]>
>
>
>
> > Hola,
>
> > Les cuento la situación en la que me encuentro a ver si pueden
> > ayudarme o guiarme un poco en la solución. Tengo una aplicación que
> > tiene que lidiar con una base de datos ya diseñada y en funcionamiento
> > desde hace rato. No tengo demasiada autonomía sobre la BD ya que
> > además es usada y administrada por otras aplicaciones como META4 por
> > ejemplo.
> > El tema en este caso son las claves compuestas. Se que no es
> > recomendado utilizarlas y que de alguna manera es alejarse del diseño
> > de objetos y acercarse al diseño de bases de datos, pero en este caso
> > (y contra mi voluntad) digamos que tengo que respetar estas claves
> > compuestas.
> > El problema se presenta en qué NH no se da cuenta cuando es una
> > inserción o cuando es una actualización, de manera que, después de
> > investigar un poco en internet buscando alternativas encontré que la
> > mayoria proponen diferenciar a mano si es un Update() o un Save().
> > Ahora bien, algunas entidades obviamente funcionaron bien, pero me
> > pasa que cuando tengo entidades padre (cuya clave es compuesta) que
> > tienen hijos (cuyas claves son compuestas también) que al querer
> > persistir los hijos me da error, al parecer porque no puede
> > identificar si debe hacer un Update() o un Save() con ellos. Es decir,
> > el padre lo podría persistir correctamente pero al llegar a los hijos
> > falla.
> > A alguno le ha tocado lidiar con este tema? Y si es asi, qué
> > soluciones encontraron? Una posible solución podría ser eliminar los
> > Cascades y realizar el mismo mecanismo manual con los hijos, es decir,
> > verificar si existen ya en la BD, y determinar si es Update() o
> > Save(). Esto calculo va a funcionar pero por ahi hay alternativas
> > mejores.
>
> > Perdón lo extenso del planteo, y si algo no quedó claro me dicen e
> > intento explicarlo mejor. Desde ya muchas gracias por cualquier dato
> > que me puedan compartir para darle una solución viable a este tema.
>
> > Saludos,
>
> > Matias.-
>
> > --
> > Para escribir al Grupo, hágalo a esta dirección:
> > [email protected]
> > Para más, visite:http://groups.google.com/group/NHibernate-Hispano
>
> --
> Para escribir al Grupo, hágalo a esta dirección: 
> [email protected]
> Para más, visite:http://groups.google.com/group/NHibernate-Hispano

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a