मेरे पास निम्नलिखित संस्थाएं हैं; मैं लोड हो रहा हूँ टिकट और गुण प्राप्त करने में कठिनाईमानदंड एपीआई: एक सूची प्राप्त करें मुख्य इकाई दोहराई जाती है
@Entity
public class Ticket {
...
@OneToMany(mappedBy="ticket", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<WorkOrder> workOrders = null;
...
}
@Entity
public class WorkOrder {
...
@ManyToOne
@JoinColumn(nullable = false)
private Ticket ticket;
}
: टिकट 0, एन WorkOrder का एक सेट होता। सभी 0,1 विशेषताओं में कोई समस्या नहीं है। वर्कऑर्डर के लिए, मैंने निम्नलिखित कोड प्राप्त करने के लिए this answer का उपयोग किया।
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<Ticket> criteriaQuery = criteriaBuilder
.createQuery(Ticket.class);
Root<Ticket> rootTicket = criteriaQuery.from(Ticket.class);
ListAttribute<? super Ticket, WorkOrder> workOrders =
rootTicket.getModel().getList("workOrders", WorkOrder.class);
rootTicket.fetch(workOrders, JoinType.LEFT);
// WHERE logic
...
criteriaQuery.select(rootTicket);
TypedQuery<Ticket> query = this.entityManager.createQuery(criteriaQuery);
return query.getResultList();
नतीजा यह है कि, एक प्रश्न है कि मुझे 5 workOrders साथ 1 टिकट लौटना चाहिए में, मैं एक ही टिकट पुन: प्राप्त करने हूँ 5 बार है।
यदि मैं सिर्फ काम करता हूं तो एक उत्सुक प्राप्त करता है और fetch कोड हटा देता है, यह काम करता है जैसा कि यह करना चाहिए।
क्या कोई मेरी मदद कर सकता है? अग्रिम में धन्यवाद।
अद्यतन:
एक के बारे में कारण है कि मैं जेबी Nizet के जवाब के साथ बस खुश नहीं हूँ स्पष्टीकरण (भले ही अंत में यह काम करता है)।
जब मैं सिर्फ रिश्ते को उत्सुक बना देता हूं, तो जेपीए उसी डेटा की जांच कर रहा है जब मैं इसे आलसी बना देता हूं और मानदंड/जेपीक्यूएल में फ़ेच क्लॉज जोड़ता हूं। विभिन्न तत्वों के बीच संबंध भी स्पष्ट हैं, क्योंकि मैं मानदंड क्वेरी के लिए ListAttribute
परिभाषित करता हूं।
इस कारण के लिए कुछ उचित स्पष्टीकरण है कि जेपीए दोनों मामलों में एक ही डेटा नहीं लौटाता है?
इनाम के लिएअद्यतन: जेबी Nizet का जवाब इस मुद्दे को हल था, मैं अभी भी यह व्यर्थ करती है, एक ही अर्थ ("Ticket
जाओ और सभी WorkOrder
ticket.workOrders
अंदर लाने") के साथ दो आपरेशन को देखते हुए एक उत्सुक लोड हो रहा है द्वारा उन्हें कर रही है fetch निर्दिष्ट करते समय कोई और परिवर्तन की आवश्यकता नहीं है DISTINCT
कमांड
का उपयोग कर आप को देखो, तो द्वारा एन 1 समस्या [वाम जुड़ें] (http://www.w3schools.com/sql/sql_join_left.asp), यह जिस तरह से यह काम करता है। बाएंजोइन द्वारा आपको परिणाम लाने की आवश्यकता क्यों है? – JMelnik
मानदंड एपीआई में उपलब्ध तीन विकल्पों में से, यह अधिक समझदार है। हम यहां जेपीए के बारे में बात कर रहे हैं, इसलिए मुझे उम्मीद थी कि एपीआई एसक्यूएल को इकाइयों में एक और उचित तरीके से व्यवस्थित करेगी। – SJuan76
मेरा संपादित उत्तर देखें। –