मुझे इस विषय के बारे में बहुत सी पोस्ट मिलीं, लेकिन सभी उत्तर दस्तावेजों के लिंक थे, उदाहरण के साथ कोई उदाहरण कोड नहीं, यानी अभ्यास में समरूपता का उपयोग कैसे करें।वसंत में हाइबरनेट के साथ Concurrency
मेरे स्थिति: मैं के साथ एक इकाई House
है (simplyfication के लिए) दो गुणधर्म हैं number
(आईडी) और owner
। डेटाबेस को के साथ number
1-10 और owner
हमेशा null
के साथ प्रारंभ किया गया है।
मैं वर्तमान में कोई मालिक नहीं, और सबसे छोटा number
घर के साथ एक नया मालिक असाइन करना चाहता हूं। ,
@Transactional
void assignNewOwner(String newOwner) {
//this is flagged as @Transactional too
House tmp = houseDao.getHouseWithoutOwnerAndSmallestNumber();
tmp.setOwner(newOwner);
//this is flagged as @Transactional too
houseDao.update(tmp);
}
मेरी समझ के लिए हालांकि @Transactional
प्रयोग किया जाता है, एक ही House
, विभिन्न मालिकों के लिए दो बार सौंपा जा सकता है अगर दो अनुरोध एक ही खाली House
tmp
के रूप में लाने: मेरे कोड इस तरह दिखता है। मैं कैसे सुनिश्चित करूं कि ऐसा नहीं हो सकता है?
मुझे पता है, खाली House
के चयन में अद्यतन सहित समस्या हल हो जाएगी, लेकिन निकट भविष्य में, मैं tmp
ऑब्जेक्ट के साथ संशोधित/काम करना चाहता हूं।
'houseDao.update (tmp); 'अनावश्यक है, क्योंकि' tmp' एक प्रबंधित इकाई है (आप एक लेनदेन विधि में हैं)। अलग-अलग 'अपडेट() 'की आवश्यकता के बिना परिवर्तन जारी रहेगा। – Kayaman