Hibernate saveOrUpdate

Jiří Mareš Jiri.Mares na svt.cz
Pondělí Říjen 25 16:59:58 CEST 2004


No je to jinak, to one-to-many muze mit pouze atribut class. Takze to 
all-delete-orphan musi byt u toho setu!! (s nejvetsi pravdepodobnosti)

Ondra Fafejta wrote:
> Podle dokumentace je cascade pro <many-to-one> možné pouze:
> 
> cascade="all|none|save-update|delete"
> 
> Používám hibernate verzi 2.1.6
> 
> viz.
> http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-declaration-manytoone 
> 
> DTD:
> http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd
> 
> Zkusím to udělat pomocí tágu
> <composite-element ...
> 
> Ještě mě napadlo, zda nevadí, že po načtení nebo uložení záznamů zavírám 
> session.
> Jestli náhodou ta session nemusí být otevřená! Ale podle tutorialu tu 
> session po každém dotazu zavírali.
> Mazání provádím tak, že vytvořím nový prázdný Set
> 
> Osoba os;
> ...
> os.setEmaily(new LinkedHashSet()); // smazani emailu
> 
> 
> 
> Jiří Mareš wrote:
> 
>> Ja to mam resene pres composite-element a pak to funguje i bez toho, 
>> ale u toho one-to-many to bude chtit jiz zminene all-delete-orphan:
>>
>> <hibernate-mapping>
>>   <class name="User" table="uzivatele" dynamic-update="true">
>>     <id name="id" type="integer" column="CISLO">
>>       ...
>>     </id>
>>     ...
>>     <set name="roles" table="role" lazy="false">
>>       <key column="CISLO"/>
>>       <composite-element class="Role">
>>         <property name="name" column="ROLE" type="string"/>
>>       </composite-element>
>>     </set>
>>   </class>
>> </hibernate-mapping>
>>
>> Vlastimil Eliáš wrote:
>>
>>> Pokud je ten odkaz na Email mapovan jako one-to-many musite nastavit 
>>> to cascade na
>>> all-delete-orphan (mozna se to jmenuje trochu jinak, podivejte se do 
>>> DTD).
>>>
>>> Vlastik
>>>
>>> Ondra Fafejta napsal(a):
>>>
>>>> Cascade="all" nastaveno mám!
>>>>
>>>>
>>>> viz. Osoba.hbm.xml
>>>> ...
>>>> <set name="emaily" inverse="true" lazy="false" cascade="all">
>>>>            <key column="id_kontakt"/>
>>>>            <one-to-many class="Email"/>
>>>> </set>
>>>> ...
>>>>
>>>> viz. Email.hbm.xml
>>>> ...
>>>> <many-to-one name="kontakt" class="Kontakt" column="id_kontakt" 
>>>> not-null="true"/>
>>>> ...
>>>>
>>>> Jiří Mareš wrote:
>>>>
>>>>> tag <set> ma atribut cascade, mozna vam pomuze nastavit mu hodnotu 
>>>>> na "all". Jakou u nej mate hodnotu?
>>>>>
>>>>> Ondra Fafejta wrote:
>>>>>
>>>>>> Zdravím Vás!
>>>>>>
>>>>>> Mám problém s aktualizací záznamů v DB pomocí hibernate!
>>>>>> Velmi zjednodušeně: existují dvě tabulky v databázi "osoba" a 
>>>>>> "email". K jedné osobě může být více emailů.
>>>>>> Tzn. v objektu Osoba.java je Set objektů typů Email.java.
>>>>>>
>>>>>> 1. Když vyplním celý objekt daty a uložím pomocí saveOrUpdate, vše 
>>>>>> je OK
>>>>>> 2. Pokud změním nějaké údaje v Osobě a přídám nějaký email, také 
>>>>>> je vše OK
>>>>>> 3. Pokud smažu množinu emailů a provedu saveOrUpdate, tak nedojde 
>>>>>> ke smazání těch emailů z databáze!
>>>>>>
>>>>>> Lze nějak v hibernate nastavit, aby při aktualizaci kontroloval 
>>>>>> obsah množiny a automaticky prováděl delete na záznamy, které se v 
>>>>>> množině nevyskytují?
>>>>>>
>>>>>> Díky
>>>>>> Fafi
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>
> 
> 

-- 
Jiří Mareš (mailto:Jiri.Mares na svt.cz)
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic


Další informace o konferenci Konference