Aynı kayıt üzerinde birden fazla işlem yapılmaması için ne yapılmalıdır?
Çok kullanıcılı sistemlerde bir kayıt üzerinde iki kullanıcının işlem yapmasını nasıl engeleyebilirim veya aynı kayıt yapılmasını nasıl engellerim?
örneğin x kullanıcısı 1 nolu kayıtı okuduğunu anda diğer yeni kullanıcılar o kayıda erişim engelini koyulabilir mi?
veya 1 nolu kayıta girip alt kayıtlar eklenecek alt kayıtlar tekil birimi ancak üç alana göre tutmam lazım x     y     z
1     1     1-----&gt;bu kayıdın olmaması gerekmektedir
1     1     2-----&gt; böyle bir kayıdın olması mümkündür
03 Şub '15, 08:09 kurtomerfaruk
04 Şub '15, 03:46
Bir kullanıcının okuduğu satırı kilitleyebileceğin gibi satıra version numarası vererekte data bütünlüğünü koruyabilirsin. Ben versiyon kullanmayı tercih ediyorum. Her iki çözüm için de link-1 link-2
03 Şub '15, 08:19 SaRPaRDa
@SaRPaRDa cevabın için teşekkürler ama bir türlü oturtamadım kafamda
(03 Şub '15, 09:48)
Veritabanındaki her satırda "version" isimli DateTime veya long tipinde bir kolon olacak. long tipi üzerinden gidecek olursak;
1 nolu kaydı eklediğinde version kolonunun değeri 1 olacak. Satır üzerinde herhangi bir değişiklik yapıldığında version numarası 1'er 1'er artacak. Veri değiştirilmek üzere alındığında versiyon numarasıda okunacak. Değişiklikler yapıldığında where alanına version numarasını da ekleyeceksinki başka bir kullanıcı değiştirdi ise onun yaptığı değişiklikler ezilmesin.
Update tablom set alan2=3, version=3 where Id=1 and version=2;
Veritabanı geriye değiştirilen satır sayısını gönderir. Değiştirilen satır sayısı sıfır ise, sen datayı okuduktan sonra başka birisi değişiklik yapmış demektir.
(03 Şub '15, 10:00)
Teşekkürler @SaRPaRDa yardımların için olumlu sonuç aldım sayende
(04 Şub '15, 03:10)
(04 Şub '15, 03:23)
Kayıt işlemi bu şekilde engelleniyor fakat uzun bir işlem olduğunu düşünürsek muhasebe de fiş girişleri birden fazla kullanıcı aynı şeyleri girme yerine kayıdı kilitlemek daha elverişli olacağını düşünüyorum da bunu nasıl yapabilirim?
(04 Şub '15, 03:32)
Şöyle söyleyeyim, versiyonlamaya optimistic, satır kilitlemeye pessimistic lock diyorlar. Pessimistic lock cevapta verdiğim link-1'de ve burada anlatılmış.
(04 Şub '15, 03:44)
eğer pessimistic lock yaparsanız, işlem uzun sürüyor ve yüksek miktarda istek gelirse kanımca Thread'ler beklemeye birikmeye başlayacak sonrası ise uygulamanın down olması demek oluyor. optimistic lock iyidir ;)
(04 Şub '15, 13:19)
@SaRPaRDa,@J2EE yardımlarınız için teşekkürler zaten pessimistici bir türlü başaramadım :)
(05 Şub '15, 02:31)
Arkadaşlar VT den conteyner ın aldığı istekleri aynı anda diğer sessionlar kontrol edemediği için kesin çözüm;
SELECT * FROM TABLE_NAME WHERE CONDITION= ? FOR UPDATE NOWAIT şeklinde ilgili kaydı locklamak olacaktır. Lockladıktan sonra ilgi kayıt üzerinde istenilen tüm işlemler yapılır. Commit verilince kayıt serbest bırakılır.
10 Şub '15, 01:46 ariferol
Datatable da nasıl yapılacak peki o durum ben her bir kayıt çekmek için bir get yapmıyorum Selected ile çekip okuyorum ?
(10 Şub '15, 10:21)
Data Table dan kastınız, kullandığınız veri tabanı tablosu ise, mantık olarak üzerinde işlem yapacağınız kayıt kümesini yukarıdaki script ile önce lock lıyorsunuz. sizin işiniz bitinceye kadar bu kayıt kümesine hiç bir session müdahale edemiyor, sadece okuyabiliyor. Siz işlemlerinizi bitirdikten sonra diğer sessionlar kayıtlar üzerinde işlem yapabiliyorlar. Bu arada "SaRPaRDa" nickli arkadaş, yukarıdaki lock lama işleminin hibernate ile yapılışını yazmış, yeni farkettim. Hibernate kullanmıyorsanız, benim yazdığım script ile kayıt veya kayıt kümesini locklayıp üzerinde işlem yapmanız gerekir.
(10 Şub '15, 16:38)
Soruldu: 03 Şub '15, 08:09
Görüntüleme: 572 kez
Son güncelleme: 11 Şub '15, 03:21
Hibernate ile kayıt silerken oluşan sorunu nasıl düzeltebilirim?
Java ile Web Sitesi Tasarlama
Hibernate Unknown Entity Hatası
Hibernate-2 tablo arasında iki farklı ilişki kurmak mümkün mü?
Hibernate ve Spring üzerinde çalışan bir proje için dil ayarları nasıl olmalıdır ?
Android'te ORM olarak neler kullanılıyor ?
Eclipsede hibernate konfigurasyon nasıl oluyor?