Bir veritabanı tablosunda bir alanı Hazırda Bekletme özelliğini kullanarak 1 arttırmak istiyorum.Hazırda bekletme: Bir tamsayı alanı artırma
Bunu yalnızca bir nesneyi yükleyerek, değeri artırarak ve nesneyi güncelleyerek yapabilirim, ancak başka bir iş parçacığı gelirse ve yük ile güncelleştirme arasındaki alanı güncelleştirirse değer bozulur. Bunun yerine ben veritabanı üzerinde doğrudan bir güncelleme çağrıda
:
AncakQuery updateHits = createQuery(
"UPDATE Job SET hitCount = hitCount + 1 WHERE id = :jobId");
updateHits.setInteger("jobId", job.getId());
updateHits.executeUpdate();
benim anlayış bu veritabanındaki iyimser kilitleme atlar ve şu anda SQL server çözümsüzlüklerle ile bir sorunu yaşıyorum ve inanıyorum ki Bu suçlu.
Güncelleştirmeyi doğrudan aramadan ve veri bütünlüğünü koruyarak bir alanı artırmanın bir yolu var mı?
Kilitlerinizin nasıl oluşturulduğunu görmek isteyip istemediğinizi kontrol etmek isteyebilirsiniz. Güncelleme için bir masa kilidi alıyorsanız, bir sorun var. Eğer bir satır kilidi alıyorsanız, nasıl bir çıkmaza neden olacağını görmüyorum. – BlackICE
Aslında, bu güncellemenin işlem içerisindeki son ifadesi olduğundan emin olmak için kilitlenme sorununu çözmeyi başardım. Ancak hala daha iyi çözümler bilmemle ilgileniyorum. – 3urdoch
"increment-by-query" çözümünüz, özellikle multi-thread ve uzun süreli işlemlerde çalışıyorsanız, kötümser kilitlerle uğraşmaktan on kat daha iyidir. – kommradHomer