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

वसंत में फ़िल्टर क्लॉज सहित OneToMany के साथ समस्याएं jpa

  • select d from TKBData d JOIN d.columns c WHERE c.name = column1 है

    1. एक TKBData ऑब्जेक्ट ढूंढें जहां उसका एक संबद्ध column है वह वस्तु जिसके लिए name column1 है
    2. एक बार यह तय हो जाने के बाद कि किस TKBData में कम से कम एक column है वह वस्तु जिसके लिए name column1 है , फिर यह अपने सभी संबद्ध column . को वापस कर देगा वस्तुएं जिस पर आपका जेपीए में नियंत्रण नहीं है। (देखें एक अन्य प्रश्न का मेरा उत्तर ) वैकल्पिक है देशी sql लिखना और कस्टम गैर-इकाई वस्तुओं को वापस करना
    3. उदाहरण के लिए, आपके पास TKBDATA_1 है column1 . के साथ और column2 संबद्ध, आपके पास TKBDATA_2 भी है column3 . के साथ संबद्ध।
    4. जब आप अपनी क्वेरी चलाते हैं, तो यह TKBDATA_2 . को अनदेखा कर देगी और TKBDATA_1 return लौटाने का निर्णय लेता है क्योंकि इसमें कम से कम एक column है name के साथ वस्तु =column2 . लेकिन उसके बाद आपके पास इस पर नियंत्रण नहीं है कि कौन से संबंधित column TKBDATA_1 . के लिए वापस आने वाली वस्तुएं और जेपीए सभी संबद्ध कॉलम ऑब्जेक्ट लौटाएगा
    5. यदि आप कारण के बारे में सुनिश्चित नहीं हैं, तो हाइबरनेट सत्र के बारे में पढ़ें। यह स्मृति में किसी भी संबद्ध प्रविष्टि की अनूठी प्रस्तुति कैसे प्रदान करता है। यह इसकी dirty checking . का आधार है और repeatable read
  • अपना @OneToManyअपडेट करें इस प्रकार है

   @OneToMany(fetch = FetchType.EAGER, 
           cascade = CascadeType.ALL, orphanRemoval = true)
   @Builder.Default
   @JoinTable(name = "TKBDATA_TKBCOLUMN", 
           joinColumns = @JoinColumn(name = "TKBDATA_ID"), 
           inverseJoinColumns = @JoinColumn(name = "COLUMNS_ID"))
   private Set<TKBColumn> columns = Sets.newHashSet();
  • जब जेपीए क्वेरी भाषा की बात आती है, तो मैं क्वेरी के संदर्भ में इन-मेमोरी ऑब्जेक्ट्स के संग्रह के बारे में सोचना चाहूंगा।

  • तो अब वस्तुओं के संदर्भ में निम्नलिखित दो प्रश्नों के अर्थ का वर्णन करने का प्रयास करें।

   select d from TKBData d LEFT JOIN d.columns c WHERE c.name = :name
           vs
   select d from TKBData d JOIN d.columns c WHERE c.name = :name
  • एसक्यूएल के विपरीत मत भूलना जहां आप यहां किसी भी कॉलम का चयन कर रहे हैं, आपने कहा है कि आप टीकेबीडाटा ऑब्जेक्ट्स का चयन करना चाहते हैं और टीकेबीडेटा ऑब्जेक्ट्स को वापस करने के लिए प्रतिबंधित करना चाहते हैं।

  • तो अपने मूल sql के समान परिणाम प्राप्त करने के लिए, दूसरी JPA क्वेरी का उपयोग करें

नोट:

भले ही आपने अपनी sql क्वेरी में लेफ्ट जॉइन का उपयोग किया हो, यह प्रभावी रूप से एक इनर जॉइन sql क्वेरी है क्योंकि आपने where भी लागू किया है उस जॉइन पर सबसे दाहिनी तालिका की स्थिति।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाटाइम प्रारूप में वर्तमान तिथि डालें mySQL

  2. शीर्ष सामान्य MySQL प्रश्न

  3. मैं एक स्टैक्ड बार में प्रत्येक दिनांक सीमा के लिए एकाधिक स्टैक्ड कॉलम कैसे प्रदर्शित करूं?

  4. विशाल PHP सरणी बनाम MySQL डेटाबेस?

  5. Symfony3 - SQLSTATE [HY000] [2002] ऐसी कोई फ़ाइल या निर्देशिका नहीं