שילוב של JPA ו / או קריטריונים חזויים

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

ניתן להשתמש ב- API של קריטריונים JPA כדי להוסיף בקלות מספר תנאי AND / OR בעת שאילתת רשומות במסד נתונים. במדריך זה, נחקור דוגמה מהירה לשאילתות קריטריונים של JPA המשלבות מספר פרדיקטים של AND / OR.

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

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

לדוגמאות שלנו, נשקול מלאי של פריט ישויות, שלכל אחת מהן יש תְעוּדַת זֶהוּת,שֵׁם, צֶבַע, ו כיתה:

פריט בכיתה ציבורית @Entity {@Id פרטי מזהה ארוך; צבע מחרוזת פרטי; ציון מחרוזת פרטי; שם מחרוזת פרטי; // סטרים וקובעים סטנדרטיים}

3. שילוב שניים אוֹ חזויות באמצעות AND לְבַסֵס

בואו ניקח בחשבון את מקרה השימוש בו עלינו למצוא פריטים עם שניהם:

  1. צבע אדום או כחול

    AND

  2. ציון A או B

אנחנו יכולים לעשות זאת בקלות באמצעות JPA Criteria API ו- () ו אוֹ() תרכובות מורכבות.

כדי להתחיל, בואו נגדיר את השאילתה שלנו:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder (); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery (Item.class); Root itemRoot = criteriaQuery.from (Item.class);

עכשיו נצטרך לבנות לְבַסֵס למצוא פריטים בעלי צבע כחול או אדום:

Predicate predicateForBlueColor = criteriaBuilder.equal (itemRoot.get ("color"), "blue"); Predicate predicateForRedColor = criteriaBuilder.equal (itemRoot.get ("color"), "red"); Predicate predicateForColor = criteriaBuilder.or (predicateForBlueColor, predicateForRedColor);

לאחר מכן, בואו לבנות a לְבַסֵס למצוא פריטים בדרגה א 'או ב':

Predicate predicateForGradeA = criteriaBuilder.equal (itemRoot.get ("grade"), "A"); Predicate predicateForGradeB = criteriaBuilder.equal (itemRoot.get ("grade"), "B"); Predicate predicateForGrade = criteriaBuilder.or (predicateForGradeA, predicateForGradeB);

לבסוף, אנו מגדירים את ה- AND לְבַסֵס מבין שני אלה, החל את איפה() שיטה, ולבצע את השאילתה שלנו:

Predicate finalPredicate = criteriaBuilder.and (predicateForColor, predicateForGrade); criteriaQuery.where (finalPredicate); פריטי רשימה = entityManager.createQuery (criteriaQuery) .getResultList ();

4. שילוב שניים AND חזויות באמצעות אוֹ לְבַסֵס

מצד שני, נבחן את המקרה בו עלינו למצוא פריטים שיש להם:

  1. צבע אדום וכיתה ד '

    אוֹ

  2. צבע כחול וכיתה ב '

ההיגיון די דומה, אבל כאן אנו יוצרים שני AND לְבַסֵסראשית ואז שלב אותם באמצעות OR לְבַסֵס:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder (); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery (Item.class); Root itemRoot = criteriaQuery.from (Item.class); לחזות predicateForBlueColor = criteriaBuilder.equal (itemRoot.get ("צבע"), "אדום"); Predicate predicateForGradeA = criteriaBuilder.equal (itemRoot.get ("grade"), "D"); Predicate predicateForBlueColorAndGradeA = criteriaBuilder.and (predicateForBlueColor, predicateForGradeA); Predicate predicateForRedColor = criteriaBuilder.equal (itemRoot.get ("color"), "blue"); Predicate predicateForGradeB = criteriaBuilder.equal (itemRoot.get ("grade"), "B"); Predicate predicateForRedColorAndGradeB = criteriaBuilder.and (predicateForRedColor, predicateForGradeB); Predicate finalPredicate = criteriaBuilder .or (predicateForBlueColorAndGradeA, predicateForRedColorAndGradeB); criteriaQuery.where (finalPredicate); פריטי רשימה = entityManager.createQuery (criteriaQuery) .getResultList ();

5. מסקנה

במדריך זה השתמשנו ב- JPA Criteria API כדי ליישם מקרי שימוש בהם היינו צריכים לשלב AND / OR predicates.

כרגיל, קוד המקור השלם המשמש להדרכה זו הסתיים ב- GitHub.


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