जेपीए 2.0 विनिर्देशों के अनुसार:
हालांकि, मैंने गिटहब पर एक कार्यशील उदाहरण हाइबरनेट का उपयोग करना।
मान लें कि हमारे पास यह CalendarEvent
है इकाई और MailingCode
डीटीओ ऑब्जेक्ट:
@Entity(name = "CalendarEvent")
@Table
public static class CalendarEvent implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ElementCollection
private final List<Integer> mailingCodes = new ArrayList<>();
}
public static class MailingCode {
private Integer id;
public MailingCode(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
}
आप मानदंड API कोड इस प्रकार लिख सकते हैं:
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<CalendarEvent> criteria = builder.createQuery(CalendarEvent.class);
Root<CalendarEvent> root = criteria.from(CalendarEvent.class);
List<MailingCode> mailingCodes = Arrays.asList(
new MailingCode(1),
new MailingCode(2),
new MailingCode(3)
);
Expression<List<Integer>> mailingCodesPath = root.get("mailingCodes");
Predicate predicate = builder.conjunction();
for(MailingCode mailingCode: mailingCodes){
predicate = builder.and(predicate, builder.isMember(mailingCode.getId(), mailingCodesPath));
}
criteria.where(predicate);
List<CalendarEvent> events = entityManager.createQuery(criteria).getResultList();
हालाँकि, IN क्वेरी एक बेहतर विकल्प है क्योंकि उपरोक्त SQL क्वेरी उप-इष्टतम है।