के साथ तारों के संग्रह के अंदर सभी वस्तुओं को प्राप्त करना मैं संग्रह के अंदर एक विशिष्ट तत्व रखने वाली इकाइयों को खोजने के लिए एक हाइबरनेट मानदंड क्वेरी बनाने की कोशिश कर रहा हूं।मानदंड एपीआई
हम एक उदाहरण है कि -object एक पुस्तक के रूप में इस तरह दिखता है ले जा सकते हैं:
public class Book {
private Long id;
private String title;
private Set<String> authors = new HashSet<String>();
}
इकाई इस तरह मैप किया गया है:
<class name="Book" table="Book">
<id name="id" column="BOOK_ID">
<generator class="native"/>
</id>
<property name="title"/>
<set name="authors" table="Book_Authors">
<key column="BOOK_ID"/>
<element type="string" column="AUTHORS"/>
</set>
</class>
अब मैं पता लगाने के लिए जो किताबें हैं चाहते हैं मैट द्वारा लिखित शुद्ध एसक्यूएल के साथ मैं इस तरह एक प्रश्न कर सकते हैं:
String author = "Matt";
String query = "SELECT * FROM Book " +
"WHERE BOOK_ID IN " +
"(SELECT BOOK_ID FROM Book_Authors " +
"WHERE authors = :author)";
List<Book> result = session.createSQLQuery(query)
.addEntity(Book.class)
.setParameter("author", author)
.list();
यह अच्छी तरह से सभी अच्छी और काम करता है, और मैं सभी पुस्तकों कि मैट लेखन का एक हिस्सा रहा है बाहर निकलना। हालांकि, मैं जिस परियोजना में काम करता हूं, कच्चे एसक्यूएल के बजाय मानदंड एपीआई का उपयोग करता है, और मुझे उस फ़ॉर्म में एक ही क्वेरी को व्यक्त करने का कोई तरीका नहीं मिला है। मैंने प्रतिबंध API पर एक नज़र डाली है और मुझे सबसे नज़दीकी पाया गया है Restions.in (propertyName, संग्रह) लेकिन यह दूसरी तरफ काम करता है (ऑब्जेक्ट में एक मान, इसके विरुद्ध मिलान करने के लिए कई मान)।
कोई विचार?
यदि लेखक एक इकाई थी, तो आप एक subquery – sblundy