On Wed, Jun 18, 2008 at 12:29:01PM +0200, Ivan Polak wrote: > 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 ? Reseni je samozrejme jako vzdycky nekolik. Nejobecnejsi, ktere bude fungovat vsude, je udelat onen jediny sloupecek one tabulky primarnim klicem a potom sama DB zarve, ze se pokousis vlozit podruhe totez. Proste klasicky DB optimisticky pristup. Pokud mas ale opravdu velice vysokou pravdepodobnost obtizi, budes muset zamykat (idealne tu jednosloupcovou tabulku, ktera stejne nema jiny vyznam nez jako ciselnik) a handlovat pripadne vyjimky na zamku.
Musim se priznat, ze by mne docela zajimalo, k cemu je to vlastne dobre. Nestacilo by mit seqenci, z ni vytahnout cislo a ulozit to do one tabulky? A nestaci vlastne jeden radek jedne tabulky? Tedy seqence? :-D Hlavne by mne zajimalo, proc se zakaznik "rype" v takovych titernostech, jako je zpusob generovani primarniho klice. Nebo ma strach, aby mu faktury sly pekne po rade? To by mu pece melo stacit, ne? Navic to nemusi fungovat, protoze kdyz on se rozhodne smazat "posledni" fakturu, tak mu tam muze pristat dalsi a ulozit novy radek do ciselniku s novou hodnotou, takze stejne bude muset precislovavat... Oto 'tapik' Buchta
