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
