2015-07-10 7 views
10

मैं एक कस्टम डिलीट बनाने की कोशिश कर रहा हूं मेरी रिपॉजिटरी में विधि विधि। ऐसा लगता है कि हटाने के बजाय, हाइबरनेट एक चुनिंदा कथन बना रहा है। > EmailAdd2_2_, contact0_.name रूप contact0_.id id1_2_ के रूप में चुनते हैं, तो contact0_.emailAddress संपर्क के रूप में से name3_2_ contact0_ जहां> contact0_:वसंत डेटा जेपीए हटाएं क्वेरी नहीं काम कर रही है

हाइबरनेट:

public interface ContactRepository extends JpaRepository<Contact, Integer> { 

    Integer deleteByEmailAddress(String emailAddress); 

    //and this one works 
    Contact findContactByName(String name); 
} 

और यहाँ क्या हाइबरनेट करने के लिए कोशिश कर रही है .emailAddress =?

मुझे क्या याद आ रही है? क्या मुझे काम खत्म करने के लिए एक विशेष विन्यास करना है?

उत्तर

19

क्या डिलीट काम नहीं कर रहा है या आप कैसे उम्मीद करेंगे इस तरह काम नहीं कर रहे हैं? आम तौर पर इसे हटाए जाने से पहले एक इकाई को प्रबंधित किया जाना चाहिए, इसलिए एक जेपीए प्रदाता (आपके मामले में हाइबरनेट) लोड करेगा (आप जो क्वेरी देखते हैं) पहले इकाई को हटा दें, फिर हटाएं जारी करें।

आप केवल क्वेरी को देख रहे हैं, लेकिन कोई हटाना इसी हैं, तो कुछ संभावनाएं हैं:

  1. वहाँ से हटाने के लिए कुछ भी नहीं है, यकीन है कि रिकॉर्ड डाटाबेस को
  2. हटाने की जरूरत में वहाँ है एक लेनदेन का हिस्सा बनें। मेरा मानना ​​है कि वसंत डेटा CRUD ऑप्स डिफ़ॉल्ट रूप से व्यवहार कर रहे हैं, अगर बस सुनिश्चित करें कि जो कुछ भी बुला रहा है deleteByEmailAddress है व्यवहार

नोट नहीं: जब एक इकाई को निकालने में कोई बदलाव क्वेरी हटाने उदाहरण नीचे का उपयोग कर, आप का चयन करने से बचने कर सकते हैं:

// NOTE: you have return void 
@Modifying 
@Transactional 
@Query(value="delete from Contact c where c.emailAddress = ?1") 
void deleteByEmailAddress(String emailAddress) 
+4

यह काम करता है के बाद मैं @transactional साथ विधि पर टिप्पणी करें। बहुत बहुत धन्यवाद, महोदय! नोट: यह क्वेरी के साथ भी काम करता है लेकिन मैं सिर्फ एक कार्यात्मक विधि क्वेरी चाहता था। –

+1

'// नोट: आपके पास वापसी शून्य है' के बारे में धन्यवाद - मैं सभी की कोशिश करूंगा लेकिन इस बारे में नहीं सोचा, यह मेरे मामले में कारण था! – yetanothercoder

+0

@ikumen क्वेरी संशोधित और लेनदेन संबंधी एनोटेशन के साथ ठीक काम कर रही है लेकिन डेटाबेस पंक्ति में अभी भी – Abhij

4

स्प्रिंग डेटा जेपीए (> = 1.7.एक्स) के आधुनिक संस्करणों में हटाने, निकालने और गिनती के लिए क्वेरी व्युत्पन्न के लिए क्वेरी व्युत्पन्न सुलभ है।

Spring Data: "delete by" is supported?

+2

है जहां मैंने शुरू किया था, लेकिन यह मेरे प्रश्न का उत्तर नहीं दे रहा है। –

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