That seems to be logical way to do it, and it isn't working. It loads the 'plazasSolicitadas' correctly (using a join), but creates new selects for 'personaAsociada.pensiones' and 'conyuge.pensiones'.
The code is:
Code:
List result = session.createCriteria(Solicitud.class)
.setFetchMode("plazasSolicitadas", FetchMode.JOIN)
.setFetchMode("personaAsociada.pensiones", FetchMode.JOIN)
.setFetchMode("conyuge.pensiones", FetchMode.JOIN)
.setFirstResult(primeraSolicitud)
.setMaxResults(numeroSolicitudes)
.setFetchSize(numeroSolicitudes)
.list();
And the mappings (just the relevant parts):
Code:
<class name="imserso.vtei.modelo.Solicitud">
<many-to-one cascade="all" fetch="join" name="solicitante"/>
<many-to-one cascade="all" fetch="join" name="conyuge"/>
<set cascade="all" order-by="numeroOrden" lazy="false" name="plazasSolicitadas">
<key column="solicitudId"/>
<one-to-many class="imserso.vtei.modelo.PlazaSolicitada"/>
</set>
</class>
<class discriminator-value="Persona" name="imserso.vtei.modelo.Persona">
<set cascade="all" lazy="false" name="pensiones">
<key column="personaId"/>
<one-to-many class="imserso.vtei.modelo.Pension"/>
</set>
<subclass name="imserso.vtei.modelo.Conyuge" discriminator-value="Conyuge"/>
<subclass name="imserso.vtei.modelo.Solicitante" discriminator-value="Solicitante"/>
</class>
<class name="imserso.vtei.modelo.Pension">
<id access="field" name="id">
<generator class="native"/>
</id>
<many-to-one fetch="join" name="procedencia"/>
<many-to-one fetch="join" name="clase"/>
<property name="cuantiaMensual" access="field"/>
</class>
<class name="imserso.vtei.modelo.ClasePension">
<id access="field" name="id">
<generator class="native"/>
</id>
<property name="descripcion" length="50" access="field"/>
<property name="codigo" length="1" access="field"/>
</class>
<class name="imserso.vtei.modelo.ProcedenciaPension">
<id access="field" name="id">
<generator class="native"/>
</id>
<property name="descripcion" access="field"/>
<property name="codigo" length="2" access="field"/>
</class>