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 >
