मेरे पास @Service
बीन्स का एक सेट है जो एक सार वर्ग से मूल कार्यक्षमता प्राप्त करता है। मैंने प्रत्येक कंक्रीट उप-वर्ग सेवाओं को @Service
और @Transactional
के साथ चिह्नित किया। अमूर्त सुपर क्लास में इन सेवाओं में से प्रत्येक के लिए सार्वजनिक प्रविष्टि बिंदु विधि शामिल है। दूसरे शब्दों में, मैं निम्न जैसा कुछ है:वसंत @ ट्रांसेक्शनल विरासत नियम
abstract class AbstractService {
public void process() {
// Do common initialisation code here
processSpecific();
// Do common completion code here
}
abstract protected void processSpecific();
}
@Service @Transactional
public class FirstSpecificService extends AbstractService {
protected void processSpecific() {
// Do specific processing code here
}
}
@Service @Transactional
public class SecondSpecificService extends AbstractService {
protected void processSpecific() {
// Do different specific processing code here
}
}
प्रत्येक ठोस उप श्रेणी सेवा में विशिष्ट कोड डेटाबेस में परिवर्तन है, जो लेन-देन संबंधी प्रचार के रूप में REQUIRED
है बनाने के लिए डीएओ परत करने के लिए कई कॉल करता है प्रकार।
अब उपरोक्त परिभाषित सेवाओं के साथ, मैंने पाया कि इन ठोस उप-वर्ग सेवाओं के किसी भी कोड के अंदर कोई मौजूदा लेनदेन नहीं था, और डीएओ परत के लिए प्रत्येक कॉल एक नया लेनदेन बना रहा था, बदलाव कर रहा था, लेनदेन और वापसी कर रहा है।
हालांकि, अगर मैं @Transactional
साथ सार सुपर स्तरीय व्याख्या करते हैं, तो एक सौदे ठीक से बनाई गई है, और डीएओ परत को उप-कॉल सभी मौजूदा लेनदेन में भाग लेते हैं।
तो मेरा सवाल यह है कि @Transactional
व्यवहार विरासत के लिए नियम क्या हैं? कंक्रीट उप-वर्ग सेवाओं पर वसंत @Transactional
का उपयोग क्यों नहीं करता है, जो वास्तव में तत्काल है? क्या @Transactional
इस मामले में सुपर-क्लास पर होना चाहिए क्योंकि वह जगह है जहां सार्वजनिक प्रविष्टि-बिंदु विधि है?
वैसे, मैंने [प्रासंगिक स्प्रिंगसोर्स प्रलेखन] (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework पर एक नज़र डाली है -reference.html # लेन-देन-घोषणात्मक-टिप्पणियां), लेकिन ऐसा लगता है कि यह कवर नहीं होता है। – DuncanKinnear