Puedo cargar asociaciones uno a muchos y muchos a uno, pero no puedo con las asociaciones de muchos a muchos.Cómo cargar perezoso una colección de muchos a muchos en hibernación?
Tenemos una ciudad en la que tenemos comerciantes que tienen direcciones. Los comerciantes pueden tener múltiples direcciones y múltiples comerciantes pueden tener las mismas direcciones.
Cuando cargamos un comerciante con un encuentro,
Merchant merchant = (Merchant) hib_session.get(Merchant.class, id);
System.out.println(merchant.getName());
está bien, direcciones no se carga hasta que iteramos sobre ellos.
Pero cuando cargamos una lista de comerciantes,
City city = (City) hib_session.get(City.class, city_name);
for(Merchant merchant : city.getMerchants()) {
System.out.println(merchant.getName());
}
incluso si no obtenemos las direcciones, hibernación automáticamente los carga.
Here's an example of my problem.
El mapeo:
<class name="Merchant" table="Merchants" lazy="true">
<id name="id"
type="long"
column="id">
<generator class="native"></generator>
</id>
<set name="addresses" table="AdressesMerchant" lazy="true">
<key column="merchant_id"></key>
<many-to-many class="Adresses" column="address_id"/>
</set>
</class>
<class name="Address" table="Adresses" lazy="true">
<id name="id"
type="long"
column="id">
<generator class="native"></generator>
</id>
<set name="merchants" table="AdressesMerchant" lazy="true">
<key column="adress_id"/>
<many-to-many column="merchant_id" class="Merchant"/>
</set>
</class>
¿Alguna idea?
que suena extraño. ¿Podrías confirmar el comportamiento? ¿Cómo se mapean sus colecciones? – Bozho
@Bozho Puedo confirmar el comportamiento registrando las consultas y veo que Hibernate carga las direcciones. Agregué las asignaciones en la pregunta. – codea
Ese no es el tema, pero ¿no debería ser una de las relaciones de muchos a muchos marcados con inversa? – Ralph