हटाएं ऑपरेशन के दौरान, क्या कोई JpaRepository मुझे सूचित कर सकता है कि मैं जिस इकाई को हटाना चाहता हूं वह मौजूद नहीं है?

मुझे पता है कि हटाने के तरीके बूलियन मान नहीं लौटाते हैं, और अपवाद भी नहीं फेंकते हैं।

मैं यह भी जानता हूं कि मैं बस कर सकता हूं मौजूद () या फाइंडवन () और फिर डिलीट कर सकता हूं, लेकिन मैं सिर्फ उत्सुक हूं।

क्या इसे जबरदस्ती करने का कोई तरीका है?

मैं स्प्रिंग बूट 1.5.1 का उपयोग कर रहा हूँ। नीचे नमूना कोड:

public HttpStatus deleteEventByTitle(String eventTitle) {
    try {
        eventRepository.deleteByTitle(eventTitle);
    } catch (EntityNotFoundException e) { // just showing what I want to do
        return HttpStatus.NOT_FOUND;
    }
    return HttpStatus.OK;
}


public interface EventRepository extends JpaRepository<Event, Long> {

    void deleteByTitle(String title);

}
2
sovas 26 अप्रैल 2017, 20:44
शून्य को इंट में बदलें, इस प्रकार int deleteByTitle(String title);। यह प्रभावित पंक्तियों को वापस कर देगा। इसलिए यदि आपके पास वापसी> 0 है तो कुछ हटा दिया गया था। यदि आप deleteByTitleOrThrow(String title) जैसी अतिरिक्त विधि चाहते हैं तो आप एक ...Impl वर्ग बना सकते हैं और एक अतिरिक्त इंटरफ़ेस जो व्यवहार को विस्तारित करने और उस विधि को उसमें जोड़ने के लिए है।
 – 
andreim
26 अप्रैल 2017, 21:10

3 जवाब

सबसे बढ़िया उत्तर

स्प्रिंग डेटा जेपीए (>=1.7.x) से शुरू करके, हम व्युत्पन्न delete या remove क्वेरी। यह हटाए गए निकायों की संख्या या सभी इकाइयों को हटाए जाने की संख्या लौटा सकता है।

इसका उपयोग करके हम अपने कोड को इस प्रकार अपडेट कर सकते हैं:

public interface EventRepository extends JpaRepository<Event, Long> {
    long deleteByTitle(String title);
}

और अगर इकाई मौजूद नहीं है तो हम अपवाद फेंक सकते हैं।

public HttpStatus deleteEventByTitle(String eventTitle) {
    long numOfEntriesDeleted = eventRepository.deleteByTitle(eventTitle);
    if(numOfEntriesDeleted != 1){
       return HttpStatus.NOT_FOUND;
    }
    return HttpStatus.OK;
}
4
Deepak Patankar 26 जुलाई 2020, 16:34

कल्पना के अनुसार यह संभव नहीं है और मुझे इस तरह की कार्यक्षमता के बारे में पता नहीं है।

मुझे पता है कि कैसेंड्रा और डेटास्टैक्स के साथ काम करते समय आप wasApplied() की जांच कर सकते हैं।

एकमात्र तरीका यह होगा कि आप अपनी खुद की deleteOrThrowException-विधि को लागू करें और यदि आपको इकाई नहीं मिली तो एक अपवाद फेंक दें।

इसे प्राप्त करने के लिए आप a . जोड़ सकते हैं

@Query("select count(event)>0 from Event e where eventTitle := eventTitle")
public boolean existsByTitle(String eventTitle);
1
questionaire 26 अप्रैल 2017, 21:01
हम्म। तो मुझे लगता है कि @Query ("..") बूलियन लिखने का सबसे अच्छा तरीका होगा ByTitle, क्योंकि स्प्रिंग डेटा मौजूद नहीं है ByAttribute।
 – 
sovas
26 अप्रैल 2017, 20:52
उदाहरण के साथ अद्यतन किया गया।
 – 
questionaire
26 अप्रैल 2017, 21:01

आप इसे हटाने से पहले आसानी से जांच सकते हैं कि यह मौजूद है या नहीं:

// Check if the ID is available
if (deviceRepository.existsById(id)) {
    deviceRepository.deleteById(id);
    //returnObject.setMessage("Deleted successfully !!");

} else {
    //returnObject.setMessage("The ID is not found");
}
0
Tomerikoo 1 अप्रैल 2021, 20:01