टिप्पणी करना स्प्रिंग परीक्षण है सुविधाजनक है, लेकिन यह कैसे नहीं अपने उत्पादन कोड निष्पादित किया जाएगा है। @Transactional एनोटेशन आपकी टेस्ट विधि चलाने से पहले एक लेनदेन शुरू करेगा और परीक्षण विधि समाप्त होने पर इसे वापस रोल करेगा।
जबकि प्रतिबद्धता फ्लश से पहले होती है, रोल-बैक नहीं होता है, इसलिए मैन्युअल फ्लश एक सुरक्षा-तंत्र है यह सुनिश्चित करने के लिए कि सभी इकाई परिवर्तनों को SQL कथन में अनुवादित किया जाता है।
एक और अधिक उचित डिजाइन इस तरह स्पष्ट रूप से लेन-देन सीमाओं आकर्षित करने के लिए किया जाएगा:
@Test
public void testRootObjects() {
final Company newCompany = new Company();
newCompany.setName("TV Company");
final Long companyId = transactionTemplate.execute(new TransactionCallback<Long>() {
@Override
public Long doInTransaction(TransactionStatus transactionStatus) {
entityManager.persist(newCompany);
return newCompany.getId();
}
});
Company detachedCompany = transactionTemplate.execute(new TransactionCallback<Company>() {
@Override
public Company doInTransaction(TransactionStatus transactionStatus) {
Company attachedCompany = entityManager.find(Company.class, companyId);
assertEquals(newCompany, attachedCompany);
assertEquals(newCompany.hashCode(), attachedCompany.hashCode());
return attachedCompany;
}
});
assertEquals(newCompany, detachedCompany);
assertEquals(newCompany.hashCode(), detachedCompany.hashCode());
}
TransactionTemplate तो मैनुअल flushes के लिए कोई आवश्यकता नहीं है अपने कोड के लिए प्रतिबद्ध होगा।
यदि आप अपने इंटरफ़ेस के माध्यम से @ ट्रांसेक्शनल सेवा विधियों को कॉल करते हैं, तो आपको लेन-देन की आवश्यकता नहीं होगी, क्योंकि आप स्प्रिंग प्रॉक्सी को कॉल कर रहे हैं, जो ट्रांज़ेक्शनइंटरसेप्टर को कॉल करेगा (माना जाता है कि आपने स्प्रिंग को ट्रांजैक्शन एनोटेशन से अवगत कराया था:) इसलिए लेनदेन आपकी ओर से शुरू/प्रतिबद्ध किया जाएगा।
स्रोत
2014-05-15 09:06:05
पास्कल, धन्यवाद। यहां सिफारिश क्या है? फ्लश() किसी भी सहेजने के बाद और पहले स्तर के कैश से बचें जब प्रदर्शन किसी समस्या का अधिक नहीं है? और क्या हमें विधि कॉल के बाहर या यहां तक कि अंदर के परीक्षण के तहत विधि को कॉल करने के बाद फ्लश करना चाहिए? कितना भ्रमित! – JavaRocky