Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

स्प्रिंग जेपीए में सटीक मिलान रिकॉर्ड कैसे प्राप्त करें @Query

यह इतना आसान नहीं है क्योंकि हाइबरनेट/जेपीए यह गारंटी देने का प्रयास करता है कि इकाई मॉडल डेटाबेस स्थिति के साथ समन्वयित है। आप स्पष्ट रूप से एक प्रक्षेपण चाहते हैं जिसे संभवतः डेटाबेस के साथ सिंक में नहीं रखा जाना चाहिए। यदि आपको वास्तव में ऐसा करना है, तो आप निम्न क्वेरी का उपयोग कर सकते हैं, लेकिन सावधान रहें कि इससे संग्रह में सेवा तत्वों को हटाया जा सकता है जो मानदंड से मेल नहीं खाते:

@Query(value = "SELECT DISTINCT req FROM request req JOIN FETCH req.services srvs WHERE (srvs.status = :serviceStatus)")
List<Request> getAll(@Param("serviceStatus") String serviceStatus);

यह आमतौर पर डीटीओ को शुरू करके नियंत्रित किया जाता है और मुझे लगता है कि यह के लिए एकदम सही उपयोग का मामला है। ब्लेज़-पर्सिस्टेंस एंटिटी व्यूज़

मैंने जेपीए मॉडल और कस्टम इंटरफ़ेस या अमूर्त वर्ग परिभाषित मॉडल के बीच आसान मैपिंग की अनुमति देने के लिए लाइब्रेरी बनाई, स्टेरॉयड पर स्प्रिंग डेटा प्रोजेक्शन जैसे कुछ। विचार यह है कि आप अपनी लक्ष्य संरचना (डोमेन मॉडल) को अपनी पसंद के अनुसार परिभाषित करते हैं और JPQL अभिव्यक्तियों के माध्यम से इकाई मॉडल के लिए विशेषताओं (गेटर्स) को मैप करते हैं।

आपके उपयोग के मामले के लिए एक डीटीओ मॉडल ब्लेज़-पर्सिस्टेंस एंटिटी-व्यू के साथ निम्न जैसा दिख सकता है:

@EntityView(Request.class)
public interface RequestDto {
    @IdMapping
    Integer getId();
    String getStatus();
    @Mapping("services[status = :serviceStatus]")
    Set<ServiceDto> getServices();

    @EntityView(Service.class)
    interface ServiceDto {
        @IdMapping
        Integer getId();
        Integer getRequestId();
        String getStatus();
    }
}

क्वेरी करना इकाई दृश्य को किसी क्वेरी पर लागू करने का मामला है, सबसे सरल केवल आईडी द्वारा एक क्वेरी है।

RequestDto a = entityViewManager.find(entityManager, RequestDto.class, id);

स्प्रिंग डेटा एकीकरण आपको इसे लगभग स्प्रिंग डेटा प्रोजेक्शन की तरह उपयोग करने की अनुमति देता है:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features

List<RequestDto> findAll(@OptionalParam("serviceStatus") String serviceStatus);

सबसे अच्छी बात यह है कि यह केवल वही राज्य लाएगा जो वास्तव में आवश्यक है!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्लॉज में जहां एकाधिक कॉलम का उपयोग करके क्वेरी करने के लिए sqlalchemy का उपयोग करना

  2. मैं फ़ाइल सिस्टम के बजाय PHP सत्र डेटा को डेटाबेस में कैसे सहेजूँ?

  3. एक कमजोर इकाई के लिए डेटाबेस मॉडलिंग

  4. mysql डेटाबेस में सरणी सहेजें

  5. अगले महीने की पहली और आखिरी तारीख MySQL में पाएं