[Javalist] Hibernate insert/update probléma

Keresztes Jozsef jkeresztes at vati.hu
2013. Jan. 29., K, 12:05:20 CET


Sziasztok !

Hibernate-tel kapcsolatban lenne egy problémám. A gond az hogy amikor INSERT-et várnék akkor UPDATE-et csinál.
A probléma nagyon egyszerű, legyen egy ORSZAG és egy TELEPULES tábla, rajtuk ülnek az Entity-k: Orszag, Telepules
és természetesen 1 országhoz N település tartozhat. A két Entity egymásra is tud hivatkozni (bidirectional),
az Orszag entity-ben elérhetők a hozzátartozó települések: 
   Set<Telepules> telepulesek; 

Amikor az entity-ket létrehozom én szeretném az Id-ket megadni (nincs @GeneratedValue),
így tehát a konstruktor első paramétere az Id.
A két tábla tök üres az adatbázisban amikor a következő programrész lefut:

Orszag orszag = new Orszag(123L, "Magyarország");
orszag.telepulesek.add(new Telepules(100L, "Makó", orszag));
orszag.telepulesek.add(new Telepules(101L, "Pécs", orszag));
hibernateSession.save(orszag);

A baj az hogy amíg az Orszag sql-insert-tel szépen tárolódik, a települések sql-update-tel akarnának bekerülni a Hibernate szerint 
(és ez exception-t okoz). De miért így működik? 

Szerintem úgy kéne működnie, hogy megnézi a 100, 101 azonosítókkal van-e már rekord a település táblában. 
Ha nincs akkor sql-insert-et, ha van akkor meg sql-update-et kéne végrehajtania.
Igazából egy saveOrUpdate() is így működik, az Id alapján eldönti ez most insert vagy update-e.

Az is kérdés hogy lehet-e így tárolni adatok az adatbázisba, lehet hogy egyenként kéne save()-et mondani mindhárom
objektumra külön-külön ?

Joe
 



További információk a(z) Javalist levelezőlistáról