के साथ मानदंड जेपीए 2 मैं 3 टेबल (एसोसिएट, अपडेट और विवरण) से कुछ ऑब्जेक्ट्स को पुनर्प्राप्त करने के लिए मानदंड बनाने की कोशिश कर रहा हूं। एक विवरण में एसोसिएट और अपडेट का संदर्भ है, और एक अद्यतन में विवरण की एक सूची का संदर्भ है। मेरा उद्देश्य उन अद्यतनों की एक सूची पुनर्प्राप्त करना है जिनमें एक निर्दिष्ट फ़ील्ड में कम से कम एक विवरण है, जो एक एसोसिएट आईडी दिया गया है। जेपीक्यूएल में करना आसान था लेकिन क्लाइंट ने कहा कि इसे मानदंडों के साथ कोड किया जाना चाहिए।3 टेबल
मेरे JPQL था:
public List<Update> getUpdates(long associateId) {
TypedQuery<Update> query = em.createQuery("select distinct u from Update u, Detail dt, Associate a "
+ "where dt.update = u and dt.associate = a and a.associateId = :id and "
+ "dt.ack_date is null", Update.class);
query.setParameter("id", associateId);
return query.getResultList();
}
मैंने कोशिश के बाद, लेकिन यह सिर्फ डेटाबेस में सभी अद्यतन दिखाई:
public List<Update> getUpdates(long associateId) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Update> query = builder.createQuery(Update.class);
Root<Update> fromUpdates = query.from(Update.class);
Root<Associate> fromAssociate = query.from(Associate.class);
Root<Detail> fromDetail = query.from(Detail.class);
Join<Detail, Associate> associateJoin = fromDetail.join("associate");
Join<Detail, Update> updateJoin = fromDetail.join("update");
TypedQuery<Update> typedQuery = em.createQuery(query
.select(fromUpdates)
.where(builder.and(
builder.equal(fromAssociate.get("associateId"), associateId),
builder.equal(fromDetail.get("associate"), associateJoin),
builder.equal(fromDetail.get("update"), updateJoin),
builder.isNull(fromDetail.get("ack_date"))
))
.orderBy(builder.asc(fromUpdates.get("updateId")))
.distinct(true)
);
return typedQuery.getResultList();
}
किसी को भी मेरी मदद कर सकते हैं? मैंने खोज की लेकिन 3 इकाइयों के साथ कोई उदाहरण नहीं मिला।
एक आकर्षण की तरह काम किया! इन मानदंडों में शामिल होने से मुझे पागल बना दिया गया, लेकिन इससे बहुत मदद मिली! धन्यवाद perissf :) –