2014-05-13 6 views
7

मेरे पास ऐसी स्थिति है जहां किसी कार्ड इकाई के पास किसी व्यक्ति के लिए विदेशी कुंजी होती है।प्रश्नोत्तरी एक क्वेरी में fetch मोड सेट

public class Card implements java.io.Serializable { 
private String cardid;  
private Person person; 

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="USERID") 
public Person getPerson() { 
    return this.person; 
} 
} 

व्यक्ति के लिए डिफ़ॉल्ट fetch प्रकार LAZY है। क्या मैं क्वेरी में EAGER को लाने का प्रकार निर्दिष्ट कर सकता हूं:

QCard qCard = QCard.card; 
JPQLQuery query = getQuery().from(qCard); 
query.list(qCard); 

किसी भी मदद के लिए धन्यवाद।

+0

तुम बस 'getPerson()' व्यक्ति वस्तु से पहले अपने वस्तु अलग है लोड करने के लिए विधि कॉल कर सकते हैं की कोशिश, आप प्रकार लाने बदलने के लिए एक विशेष कारण है क्या किया? –

+0

कारण मैं fetch प्रकार को बदलना चाहता हूं क्वेरी को अनुकूलित करना है। मेरे पास एक ऐसा मामला है जहां मुझे कई विदेशी कुंजी वस्तुओं को लोड करने की आवश्यकता है। ऐसा लगता है कि धीमा काम करता है। – Marko

+0

तो आप QueryDSL में JPAQL से 'FETCH' कीवर्ड खोज रहे हैं। क्या आप यही खोज रहे हैं? https://groups.google.com/forum/#!msg/querydsl/Geexg_eN2yA/iREXf-DM0nwJ –

उत्तर

12

आप

QCard qCard = QCard.card; 
List<Card> cards = getQuery().from(qCard) 
    .innerJoin(qCard.person).fetch() 
    .list(qCard); 
+0

उत्पत्ति मैंने fetchAll के साथ आंतरिक जॉइन की कोशिश की। मुझे पता चला कि संयोजन बचे हुए कार्यों के साथ जुड़ गया। सुनिश्चित नहीं है कि यह मामला है या कुछ कैशिंग समस्या थी। – Marko

+0

कृपया अपना कामकाजी कोड उत्तर में रखें और इस समस्या को हल करें –

+0

टिमो के उत्तर कार्य। यदि मैं fetch() का उपयोग करता हूं, तो व्यक्ति उत्सुकता से प्राप्त होता है, लेकिन अगर मैं fetchAll() का उपयोग नहीं करता हूं। – Marko

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