2016-10-03 13 views
8

वसंत जेपीए भंडार लेनदेन पर 1 त्वरित प्रश्न। मैं एक सेवा है जो व्यवहार के रूप में चिह्नित नहीं कर रहा है और कहता है वसंत जेपीए भंडार विधिवसंत जेपीए भंडार लेनदेन

userRegistrationRepository.deleteByEmail(email); 

है और यह समस्या यह है कि यह वास्तविक लेन-देन के साथ "के साथ नहीं EntityManager विफल रहता है

@Repository 
public interface UserRegistrationRepository extends JpaRepository<UserRegistration, Long> { 

    UserRegistration findByEmail(String email); 

    void deleteByEmail(String email); 

} 

के रूप में परिभाषित किया गया है वर्तमान धागे के लिए उपलब्ध - विश्वसनीय रूप से 'हटाएं' कॉल को संसाधित नहीं कर सकता; नेस्टेड अपवाद javax.persistence.TransactionRequiredException "अपवाद है।

ठीक है, मैं यह सेवा याdeleteByEmail (..) व्यवहार के रूप में विधि चिह्नित करके हल कर सकते हैं, लेकिन मैं अभी नहीं समझ सकता क्यों यह अब दुर्घटनाओं। स्प्रिंग प्रलेखन स्पष्ट रूप से बताता है कि "भंडार उदाहरणों पर सीआरयूडी विधियां डिफ़ॉल्ट रूप से लेनदेनत्मक हैं।" (http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions), लेकिन स्पष्ट रूप से यह कोई नहीं है ... तो क्या यह कथन CrudRepository के सदस्यों से संबंधित है?

पुनश्च: उस के लिए स्प्रिंग डाटा जेपीए 1.9.4

उत्तर

10

आप सही हैं। केवल सीआरयूडी विधियों (CrudRepository विधियों) को डिफ़ॉल्ट रूप से लेनदेन के रूप में चिह्नित किया जाता है। यदि आप कस्टम क्वेरी विधियों का उपयोग कर रहे हैं तो आपको इसे @Transactional एनोटेशन के साथ स्पष्ट रूप से चिह्नित करना चाहिए।

@Repository 
public interface UserRegistrationRepository extends JpaRepository<UserRegistration, Long> { 

    UserRegistration findByEmail(String email); 

    @Transactional 
    void deleteByEmail(String email); 

} 

आपको सेवा विधियों के बजाय भंडार इंटरफ़ेस विधियों को चिह्नित करने के परिणामों के बारे में भी अवगत होना चाहिए। आप डिफ़ॉल्ट लेन-देन प्रचार विन्यास (Propagation.REQUIRED) तो उपयोग कर रहे हैं:

लेनदेन विन्यास खजाने पर तो उपेक्षित किया जाएगा बाहरी लेन-देन विन्यास के रूप में वास्तविक एक इस्तेमाल किया निर्धारित करता है।

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions

संबंधित मुद्दे