Dobry den.

Po migracii z Hibernate 2 na Hibernate 3 som zistil, ze sa zmenil sposob vykonavania kaskadnych deletov. Ak vo verzii 2 stacilo nastavit v mappingu listu, ktory bol sucastovu nejakeho objektu cascade="delete" resp. cascade="all", tak vo verzii 3 je to inac.

Docital som sa ze vztah Parent -> Childs musi byt mapovany takto:

Napr. vztah Person a Addresses:

<set name="addresses" cascade="save-update" inverse="true" lazy="true">
   <key column="PERSON_REF" not-null="false" on-delete="cascade"/>
   <one -to-many class="Address"/>
</set>


on-delete="cascade" sice zabezpeci, pri vytvarani tabulky, na strane databazy kaskadny delete, ale toto je mozne nastavit iba v pripade, ak sa z povodne jednosmerneho (unidirectional) vztahu stane obojsmerny vztah (bidirectional) a v mappingu listu adries sa nastavi inverse="true". Tym padom musi pribudnut mapovanie druhej strany asociacie, t.j. na strane adresy a trieda Address musi obsahovat objekt Person.

class Address {
    private Person person;

    public void setPerson(Person person) ...
    public Person getPerson() ...
\
}

Z pohladu objektoveho navrhu (modelovanie realneho sveta) mi nie je jasne preco je nutne, aby objekt Address  mal  informacie o objekte Person. Je mozne to v HB3 urobit inac alebo toto je jedina moznost? Vyzaduje si to v nasom projekte velke zmeny v persistentnych objektoch a samozrejme zmeny mapovani.

Dakujem za Vase odpovede.

Miroslav Farkas

Odpovedet emailem