ממשק API קריטריונים - דוגמה לביטויי IN

1. סקירה כללית

לעתים קרובות אנו נתקלים בבעיות בהן אנו צריכים לבצע שאילתות על ישויות על סמך האם תכונה בעלת ערך יחיד היא חברה באוסף נתון.

במדריך זה נלמד כיצד לפתור בעיה זו בעזרת ה- קריטריונים ממשק API.

2. ישויות לדוגמא

לפני שנתחיל, בואו נסתכל על הישויות שאנו נשתמש בהן בכתב.

יש לנו עובד המחלקה כיתה שיש בה יחסים רבים לאחד עם מַחלָקָה מעמד:

@Entity מחלקה ציבורית DeptEmployee {@Id @GeneratedValue (אסטרטגיה = GenerationType.SEQUENCE) מזהה פרטי ארוך; כותרת מחרוזת פרטית; מחלקת מחלקה פרטית @ManyToOne; }

וגם ה מַחלָקָה ישות הממפה למספר רב עובדים במחלקה:

מחלקת מחלקה ציבורית @Entity {@Id @GeneratedValue (אסטרטגיה = GenerationType.SEQUENCE) מזהה פרטי ארוך; שם מחרוזת פרטי; @OneToMany (mappedBy = "מחלקה") עובדים ברשימה פרטית; }

3. ה CriteriaBuilder.In

קודם כל, בואו נשתמש ב- CriteriaBuilder מִמְשָׁק. ה ב () השיטה מקבלת ביטוי ומחזיר חדש לְבַסֵס של ה CriteriaBuilder.In סוּג. בעזרתו ניתן לבדוק אם הביטוי הנתון כלול ברשימת הערכים:

CriteriaQuery criteriaQuery = criteriaBuilder.createQuery (DeptEmployee.class); שורש שורש = criteriaQuery.from (DeptEmployee.class); ב- inClause = criteriaBuilder.in (root.get ("כותרת")); עבור (כותרת מחרוזת: כותרות) {inClause.value (כותרת); } criteriaQuery.select (root) .where (inClause);

4. ה ביטוי. בתוך

לחלופין, אנו יכולים להשתמש בערכת עומס יתר ב () שיטות מה- ביטוי מִמְשָׁק:

criteriaQuery.select (root) .where (root.get ("title") .in (titels));

בניגוד ל CriteriaBuilder.ב (), ה Expression.in () מקבל אוסף ערכים. כפי שאנו רואים זה גם מפשט מעט את הקוד שלנו.

5. IN ביטויים באמצעות שאילתות משנה

עד כה השתמשנו באוספים עם ערכים מוגדרים מראש. עכשיו, בואו נסתכל על דוגמה כאשר אוסף נגזר מפלט של שאילתת משנה.

למשל, אנחנו יכולים להביא הכל עובד המחלקהs השייכים לא מַחלָקָה, עם מילת המפתח שצוינה בשמם:

שאילתת משנה של שאילתת משנה = criteriaQuery.subquery (Department.class); שורש שורש = subquery.from (מחלקה. מחלקה); subquery.select (dept) .distinct (true) .where (criteriaBuilder.like (dept.get ("name"), "%" + searchKey + "%")); criteriaQuery.select (emp) .where (criteriaBuilder.in (emp.get ("מחלקה")). value (שאילתת משנה));

כאן, יצרנו שאילתת משנה שהועברה לאחר מכן אל ה- ערך() כביטוי לחיפוש מַחלָקָה יֵשׁוּת.

6. מסקנה

במאמר מהיר זה, למדנו דרכים שונות להשיג את פעולת ה- IN באמצעות ה- Criteria API. בדקנו גם כיצד להשתמש ב- API של קריטריונים עם שאילתות משנה.

לבסוף, היישום המלא של מדריך זה זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found