के साथ पिवट-जैसे परिणाम हमारे प्रोजेक्ट में हम जेपीए 2, स्प्रिंग डेटा और क्वेरीडीएसएल का उपयोग कर रहे हैं। मैं निम्न तालिकाओं और संबंधित जेपीए संस्थाओं है: Actitivy के लिएजेपीए/क्वेरीडीएसएल
table Person (id, ...)
table Activity (id, type, ...)
@Entity
@Configurable
public class Activity {
@ElementCollection
@CollectionTable(joinColumns = @JoinColumn(name = "ACTIVITY_ID"))
@NotEmpty
@Valid
private Set<ActivityName> names = new HashSet<>();
table ActivityName(activity_id, name, ...)
@Embeddable
@Immutable
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "NAME"))
public static class ActivityName { ... }
table ActivityLevel(person_id, activity_id, level)
@Entity
@Immutable
@Validated
public final class ActivityLevel{...}
1..n ActivityName करने के लिए - एक गतिविधि अलग-अलग नाम हो सकता है (चल जैसे, जॉगिंग)
एक व्यक्ति के लिए एक निश्चित स्तर हो सकता है एक दी गई गतिविधि और कई गतिविधियों को परिभाषित कर सकती है (प्रत्येक परिभाषित स्तर के साथ)।
- गतिविधि नाम (जैसे आदि चल) पैरामीटर के रूप में के साथ एक खोज (गतिविधि नामों की सूची) एक परिणाम के सभी व्यक्तियों को पाया जाना चाहिए, जो संबंधित अभ्यास को पूरा के रूप में
- होनी चाहिए।
- परिणाम सभी गतिविधियों उनकी संगत स्तर, व्यक्ति का नाम और व्यक्तियों की गतिविधियों के समग्र राशि
उदाहरण निम्न डेटा के साथ के लिए खोज में शामिल करना चाहिए:
- व्यक्ति = (आईडी = 1 , नाम = बॉब)
- व्यक्ति = (आईडी = 2, नाम = मैरी)
- गतिविधि = (1, ...)
- गतिविधि = (2, ...) 01,235,
- ActivityName = (activity_id = 1, नाम = "जॉगिंग")
- ActivityName = (activity_id = 1, नाम = "चल")
- ActivityName = (activity_id = 2, नाम = "नाच")
- ActivityLevel = (person_id = 1, activity_id = 1, स्तर = 0.7f)
- ActivityLevel = (person_id = 1, activity_id = 2, स्तर = 0.1f)
- ActivityLevel = (person_id = 2, activity_id = 1, स्तर = 0.5 एफ)
"चल रहे लोगों के लिए खोज रहे हैं "या" नाच "इस तरह एक परिणाम मिलना चाहिए:
Person[Name] ActitiyName ActivityLevel ActitiyName ActivityLevel Sum
Bob running 0.7 dancing 0.1 0.8
Mary running 0.5 0.5
मेरे प्रश्न: वहाँ एक जेपीए QL/QueryDSL तरीके के साथ एक अभिव्यक्ति/प्रक्षेपण इस तरह के एक परिणाम प्राप्त करने के है? मेरे पास पहले से ही एक बहु-चरण समाधान है - गतिविधि नाम और स्तर का चयन करना, समूह बनाना और जावा 8 के साथ योग करना। अगर मैं querydsl के साथ समूहबद्ध करता हूं, तो मुझे एकल स्तर की प्रविष्टियां नहीं मिलती हैं। इसके विपरीत, मेरे समाधान में मुझे कई अन्य कदम उठाने पड़ते हैं।
यह जानना अच्छा होगा कि यह क्वेरी का उपयोग करके संभव है या नहीं।
आपके उत्तर के लिए धन्यवाद। इस मामले में एक गतिशील डीबी कैसे काम करना चाहिए? क्षमा करें, मैं इससे परिचित नहीं हूं। – swinkler