मैं आपको लगता है कि जेपीए 2.0 लागू करता हाइबरनेट के एक संस्करण का उपयोग कर रहे मान। यहां एक जेपीए 2.0 समाधान है जो किसी भी अनुरूप कार्यान्वयन के साथ काम करना चाहिए।
कृपया जेपीए के @ElementCollection
एनोटेशन के साथ uuids
एनोटेट करें। कुछ अन्य उत्तर टिप्पणियों में उल्लिखित हाइबरनेट के @CollectionOfElements
का उपयोग न करें। उत्तरार्द्ध समकक्ष कार्यक्षमता है लेकिन being deprecated है।
Foobar.java
इस तरह लगभग दिखेगा:
@Entity
public class Foobar implements Serializable {
// You might have some other id
@Id
private Long id;
@ElementCollection
private List<String> uuids;
// Getters/Setters, serialVersionUID, ...
}
यहाँ कैसे आप एक CriteriaQuery
निर्माण कर सकते हैं सभी Foobar
रों जिसका uuids
"abc123" शामिल चयन करने के लिए है।
public void getFoobars() {
{
EntityManager em = ... // EM by injection, EntityManagerFactory, whatever
CriteriaBuilder b = em.getCriteriaBuilder();
CriteriaQuery<Foobar> cq = b.createQuery(Foobar.class);
Root<Foobar> foobar = cq.from(Foobar.class);
TypedQuery<Foobar> q = em.createQuery(
cq.select(foobar)
.where(b.isMember("abc123", foobar.<List<String>>get("uuids"))));
for (Foobar f : q.getResultList()) {
// Do stuff with f, which will have "abc123" in uuids
}
}
मैंने इसके साथ खेलने के दौरान एक आत्मनिर्भर प्रमाण-अवधारणा कार्यक्रम बनाया। मैं इसे अभी बाहर नहीं दबा सकता। कृपया टिप्पणी करें कि क्या आप पीओसी को जिथब पर धक्का देना चाहते हैं।
स्रोत
2010-04-29 22:57:35
हाइबरनेट 3.6.7-फ़ाइनल के साथ प्रयास किया और काम नहीं करता (यह हाइबरनेट में एक बग प्रतीत होता है)। – greuze