Zdravim,

Teoreticky je to trivialni: proste celou operaci provest v jedne transakci s 
dostatecnou urovn izolace
(REPEATABLE_READ, SERIALIZABLE).

Prakticky je nutne poradne prozkoumat jak funguje konkretni databaze a osetrit 
dve veci:
 1) Nektere databaze nepouzivaji klasicke pesimisticke zamykani, napriklad 
postgresql. V takovem pripade je nutne pocitat s tim, ze commit muze skoncit s 
vyjimkou - tuto chybu je nutne na aplikacni urovni osetrit tim, ze se cela 
operace provede znova (a nebo zobrazit uzivateli zpravu ze doslo ke kolizi, at 
to zkusi znova).

 2) U tech ostatnich databazi (troufam si rici, ze jich je vetsina) zase muze 
dojit k deadlocku. Deadlock je sice automaticky detekovan, ale databaze ho 
vyresi tim ze jednu transakci zrusi (rollback) a v aplikaci se vygeneruje 
vyjimka. Osetreni je pak stejne jako v predchozim pripade.
Deadlocku se da predchazet tim, ze se zamek na onen inkrementovany radek ziska 
co nejdrive, idealne jako zcela prvni operace v transakci. Na to je nutne 
provest misto SELECT ... FOR UPDATE - syntaxe se samozrejme muze lisit, 
semantika tez.


Kamil Podlesak


> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Behalf Of Ivan Polak
> Sent: Wednesday, June 18, 2008 12:29 PM
> To: [email protected]
> Subject: tabulkovy ciselnik
> 
> 
> Zdravim konferenciu,
> 
> mam aplikaciu kde pouzivam Spring a Hibernate. zakaznik si ale okrem
> klasickeho id-cka zo sequenceru chce cislovat zaznamy v DB specialnym
> ciselnikom z tabulky. teda je tabulka (ma jeden stlpec) kde 
> je zapisane
> posledne volne cislo. toto cislo potrebujem zobrat (select do 
> DB) a nasledne
> ho inkrementovat o 1 (zapis do DB). to cislo ktore som zobral priradim
> dokumentu. toto potrebujem spravit ako jednu operaciu aby nebolo mozne
> priradit toto cislo inemu dokumentu. neviete niekto poradit 
> ako na to ?
> 
> dakujem
> 
> Ivan
> 
> ________________________________________________
> Message sent using Webmail 2.7.9
> 

Odpovedet emailem