2016-08-19 9 views
6

पर विचार करें मैं एक मॉडल है। लेकिन हर व्यक्ति की कोई कंपनी नहीं है।GreenDAO वाम जुड़ें

मैं से बचने के लिए है कि एक नए SQL क्वेरी में करने के लिए person.getCompany() परिणाम हर कॉल तो मैं जोड़ने के बारे में सोच रहा था आदेश एक में शामिल होने:

QueryBuilder<Person> queryBuilder = session.getPersonDao().queryBuilder(); 
queryBuilder.join(PersonDao.Properties.CompanyId, Company.class); 
queryBuilder.list() 

समस्या यह है कि मैं केवल एक कंपनी के साथ लोगों को मिलता है क्योंकि उत्पन्न है क्वेरी जॉइन का उपयोग करती है जो INNER जॉइन के बराबर है। मुझे लगता है कि मुझे कंपनी के बिना व्यक्तियों को पाने के लिए बाएं जॉइन की आवश्यकता होगी।

ऐसा लगता है कि ग्रीनडाओ अभी बाएं जॉइन का समर्थन नहीं करता है। कच्चे प्रश्न के बिना अनुरोध करने का कोई और तरीका है?

+0

यदि आप एक अलग ओआरएम का उपयोग करने के लिए खुले हैं, तो मैं जेडीएक्सए ओआरएम (http://softwaretree.com/v1/products/jdxa/jdxa.html) का सुझाव दे सकता हूं। जेडीएक्सए सभी योग्य व्यक्ति वस्तुओं और किसी भी संबंधित कंपनी वस्तुओं को लाएगा। यदि कोई संबंधित कंपनी ऑब्जेक्ट मौजूद नहीं है, तो एक व्यक्ति ऑब्जेक्ट अभी भी प्राप्त किया जाएगा। –

उत्तर

0

इसे कच्ची क्वेरी लिखने के बिना हासिल किया जा सकता है।

यहाँ टुकड़ा है:

QueryBuilder<Person> qb = userDao.queryBuilder(); 
List<Person> outputPersonList = userDao.queryDeep(" ", null); 

यह रूप में निम्न स्तर पर संकलित:

SELECT T."_id",T."NAME",T."COMPANY_ID",T0."_id",T0."NAME" 
    FROM PERSON T 
    LEFT JOIN COMPANY T0 
    ON T."COMPANY_ID"=T0."_id" 
बेशक

अगर Person मॉडल अन्य संबंधों है, उन सभी को दिलवाया किया जाएगा, ताकि इस SQL क्वेरी धीमी होगी।

हालांकि, यह मूल रूप से करता है, आप क्या उम्मीद करते हैं।

+0

मुझे नहीं लगता कि queryDeep() मेरे मामले में बहुत प्रभावी नहीं होगा। और मुझे querydeep() का उपयोग करते समय एक क्लॉज की आवश्यकता होगी, जो कुछ कच्चे प्रश्न के बराबर है। –

+0

हां, आपको हाथ लिखा जाना होगा जहां [ग्रेन्डो नमूने] में वर्णित एक जैसा खंड (https://github.com/greenrobot/greenDAO/blob/1d267398b17ec5e24afffc66e295b469718902a8/tests/DaoTest/src/androidTest/java/org /greenrobot/greendao/daotest/entity/RelationEntityTest.java#L166) –

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