के साथ सेट वाले आइटम ढूंढना मैं उन टैग्स को ढूंढना चाहता हूं जिनमें सभी उनके टैग सेट में दिए गए टैग शामिल हैं।किसी दिए गए सेट के सभी तत्वों को jpql
@Entity
class Item {
@ManyToMany
var tags: java.util.Set[Tag] = new java.util.HashSet[Tag]()
}
@Entity
class Tag {
@ManyToMany(mappedBy="tags")
var items: java.util.Set[Item] = new java.util.HashSet[Item]
}
यदि मैं यह
select distinct i
from Item i join i.tags t
where t in (:tags)
है जैसे कि यह कोशिश मैं आइटम कि दिया टैग के किसी भी शामिल मिलती है:
यहाँ सरलीकृत वर्ग हैं। यह आश्चर्य की बात नहीं है, लेकिन मुझे उन आइटम्स चाहिए जिनमें दिए गए टैग के सभी शामिल हैं।
select distinct i
from Item i join i.tags t
where (:tags) in t
मैं त्रुटि संदेश org.hibernate.exception.SQLGrammarException: arguments of row IN must all be row expressions
मिल: तो मैं इसे दूसरी तरह के आसपास की कोशिश करो। यह काम करता है अगर tags
में केवल एक टैग है, लेकिन यह उससे अधिक के साथ विफल रहता है।
मैं इसे जेपीक्यूएल में कैसे व्यक्त कर सकता हूं?
select i from Item i join i.tags t
where t in :tags group by i.id having count(i.id) = :tagCount
क्योंकि मुझे लगता है कि आप हाइबरनेट में अन्य सरणी के साथ सेट की तुलना नहीं कर सकते हैं। मुझे लगता है कि आपको एसक्यूएल क्वेरी कोड दोबारा लिखना होगा। –
क्वेरी क्वेरी = session.createQuery ("स्टॉक से जहां स्टॉक आईडी (: कोड)"); query.set पैरामीटर सूची ("कोड", idList); –
मैं सराहना करता हूं कि आपने अपने प्रश्न में दिखाया है कि आप उन वस्तुओं को कैसे प्राप्त करते हैं जिनमें दिए गए टैग में से कोई भी शामिल है! यही वह है जिसे मैं ढूंढ रहा था। मैं पुष्टि कर सकता हूं कि यह '@ ElementCollection की भी काम करता है। –