Mogę leniwy ładować relacje jeden do wielu i wiele do jednego, ale nie mogę z powiązaniami wiele do wielu.Jak leniwie załadować kolekcję wiele do wielu w stanie hibernacji?
Mamy miasto, w którym mamy kupców, którzy mają adresy. Sprzedawcy mogą mieć wiele adresów, a wielu sprzedawców może mieć te same adresy.
Kiedy załadować kupca z GET,
Merchant merchant = (Merchant) hib_session.get(Merchant.class, id);
System.out.println(merchant.getName());
jest ok, adresy nie są załadować aż iteracyjne nad nimi.
Ale kiedy załadować listę kupców,
City city = (City) hib_session.get(City.class, city_name);
for(Merchant merchant : city.getMerchants()) {
System.out.println(merchant.getName());
}
nawet jeśli nie mamy adresy, hibernacji automatycznie ładuje je.
Here's an example of my problem.
Odwzorowanie:
<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>
Jakieś pomysły?
To brzmi dziwnie. Czy możesz potwierdzić zachowanie? W jaki sposób są odwzorowywane twoje kolekcje? – Bozho
@Bozho Mogę potwierdzić zachowanie logując kwerendy i widzę, że Hibernate ładuje adresy. Dodałem mapowania w pytaniu. – codea
To nie jest temat, ale nie powinno być jednym z wielu relacji oznaczonych odwrotnie? – Ralph