HIBERNATE Relaciones N a M

pedro
01 de Abril del 2004
Tengo 3 tablas
1. Subareas(IdArea,IdSubarea como PK compuesta)
2. Cursos (IdCurso como PK)
3. AgrupacionCursos(IdArea,IdSubarea,IdCurso como PK compuesta).

La tabla de agrupacionCursos mantiene la relacion N a M entre Subareas y Cursos.

Los mapeos (creo) que son correctos, pues a partir de Cursos obtengo las Subareas a las que pertenece uno en particular, sin embargo, a partir de un Subarea no soy capaz de recuperar los Cursos.

Llevo días con esta historia, y el tema de Claves Compuestas me desconcierta.

Mapeo para subarea:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE hibernate-mapping (View Source for full doctype...)>
- <!-- "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
-->
- <hibernate-mapping default-cascade="none" default-access="property" auto-import="true">
- <class name="es.pabalo.sttm.hibernate.persistencia.Subarea" table="subareas" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" batch-size="1" select-before-update="false" optimistic-lock="version">
- <composite-id name="idCompSubarea" class="es.pabalo.sttm.hibernate.persistencia.IdCompSubarea" unsaved-value="none">
<key-property name="idSubarea" column="IdSubarea" type="java.lang.Long" />
<key-property name="idArea" column="IdArea" type="java.lang.Long" />
</composite-id>
<property name="nombre" column="Nombre" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<property name="descripcion" column="Descripcion" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<property name="codigo" column="Codigo" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<many-to-one name="area" class="es.pabalo.sttm.hibernate.persistencia.Area" column="IdArea" update="false" insert="false" not-null="false" unique="false" outer-join="auto" />
- <set name="cursos" table="agrupacioncursos" cascade="all" lazy="false" sort="unsorted" inverse="false" batch-size="1" outer-join="auto">
- <key>
<column name="IdSubarea" />
<column name="IdArea" />
</key>
<many-to-many column="IdCurso" class="es.pabalo.sttm.hibernate.persistencia.Curso" outer-join="auto" />
</set>
</class>
</hibernate-mapping>


Mapeo de Cursos:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE hibernate-mapping (View Source for full doctype...)>
- <!-- "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
-->
- <hibernate-mapping default-cascade="none" default-access="property" auto-import="true">
- <class name="es.pabalo.sttm.hibernate.persistencia.Curso" table="cursos" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" batch-size="1" select-before-update="false" optimistic-lock="version">
- <id name="idCurso" column="IdCurso" type="java.lang.Long" unsaved-value="0">
<generator class="identity" />
</id>
<property name="nombre" column="Nombre" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<property name="descripcion" column="Descripcion" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<property name="referencia" column="Referencia" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<property name="horas" column="Horas" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<property name="creditos" column="Creditos" type="java.lang.Long" not-null="false" unique="false" update="true" insert="true" />
<property name="horario" column="Horario" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<property name="fecIni" column="FecIni" type="java.util.Date" not-null="false" unique="false" update="true" insert="true" />
<property name="fecFin" column="FecFin" type="java.util.Date" not-null="false" unique="false" update="true" insert="true" />
<property name="precio" column="Precio" type="java.lang.Float" not-null="false" unique="false" update="true" insert="true" />
<property name="fecAlta" column="FecAlta" type="java.util.Date" not-null="false" unique="false" update="true" insert="true" />
<property name="lugar" column="Lugar" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
<property name="fecIniPreinsc" column="FecIniPreinsc" type="java.util.Date" not-null="false" unique="false" update="true" insert="true" />
<property name="fecFinPreinsc" column="FecFinPreinsc" type="java.util.Date" not-null="false" unique="false" update="true" insert="true" />
<property name="codigo" column="Codigo" type="java.lang.String" not-null="false" unique="false" update="true" insert="true" />
- <set name="documentacionesCurso" table="documentacioncursos" lazy="false" sort="unsorted" inverse="false" batch-size="1" outer-join="auto">
<key column="IdCurso" />
<one-to-many class="es.pabalo.sttm.hibernate.persistencia.DocumentacionCurso" />
</set>
- <set name="subareas" table="agrupacioncursos" lazy="false" cascade="all" inverse="true" sort="unsorted" batch-size="1" outer-join="auto">
<key column="IdCurso" />
- <many-to-many class="es.pabalo.sttm.hibernate.persistencia.Subarea" outer-join="auto">
<column name="IdSubarea" />
<column name="IdArea" />
</many-to-many>
</set>
</class>
</hibernate-mapping>