A JPA és / vagy a kritérium-előrejelzések kombinálása

1. Áttekintés

A JPA Criteria API segítségével könnyen hozzáadhat több ÉS / VAGY feltételt, amikor lekérdezi az adatbázisban lévő rekordokat. Ebben az oktatóanyagban egy gyors példát tárunk fel a JPA-feltételekkel kapcsolatos lekérdezésekre, amelyek több ÉS / VAGY predikátumot kombinálnak.

Ha még nem ismeri a predikátumokat, javasoljuk, hogy először olvassa el az alapvető JPA-feltételekkel kapcsolatos lekérdezéseket.

2. Minta alkalmazás

Példáinkként megvizsgáljuk a Tétel entitások, amelyek mindegyikének van egy id,név, szín, és fokozat:

@Entity public class Item {@Id private Long id; saját karakterlánc színe; privát húr fokozat; privát karakterlánc neve; // szabványos mérőeszközök és beállítók}

3. Kettő kombinálása VAGY Előrejelzések egy ÉS Állítmány

Vizsgáljuk meg azt a felhasználási esetet, amikor mindkét elemet meg kell találnunk:

  1. piros vagy kék színű

    ÉS

  2. A vagy B fokozat

Ezt könnyen megtehetjük a JPA Criteria API-k használatával és() és vagy() összetett predikátumok.

Először állítsuk be a lekérdezésünket:

CriteriaBuilder criteriaBuilder = entitásManager.getCriteriaBuilder (); CriteriaQuery criterQuery = criterBuilder.createQuery (Item.class); Root itemRoot = feltételekQuery.from (Item.class);

Most meg kell építenünk egy Állítmány kék vagy piros színű elemek megkereséséhez:

Predikátum predikátumForBlueColor = feltételekBuilder.equal (itemRoot.get ("color"), "kék"); Predikátum predikátumForRedColor = feltételekBuilder.equal (itemRoot.get ("color"), "red"); Predikátum predikátumForColor = feltételekBuilder.or (predikátumForBlueColor, predikátumForRedColor);

Ezután építsünk egy Állítmány A vagy B osztályú tételek kereséséhez:

Predikátum predikátumForGradeA = feltételekBuilder.equal (itemRoot.get ("évfolyam"), "A"); Predikátum predikátumForGradeB = feltételekBuilder.equal (itemRoot.get ("évfolyam"), "B"); Predikátum predikátumForGrade = feltételekBuilder.or (predikátumForGradeA, predikátumForGradeB);

Végül meghatározzuk az ÉS-t Állítmány e kettő közül alkalmazza a hol() metódust, és hajtsa végre a lekérdezésünket:

Predicate finalPredicate = feltételekBuilder.and (predicateForColor, predicateForGrade); feltételekQuery.where (finalPredicate); Lista elemek = entitásManager.createQuery (feltételekQuery) .getResultList ();

4. Kettő kombinálása ÉS Előrejelzések egy VAGY Állítmány

Másrészt vegyük fontolóra azt az esetet, amikor olyan elemeket kell találnunk, amelyek valamelyikével rendelkezik:

  1. piros szín és D fokozat

    VAGY

  2. kék szín és B fokozat

A logika meglehetősen hasonló, de itt két ÉS-t hozunk létre Állítmánys először, majd egy OR segítségével kombinálja őket Állítmány:

CriteriaBuilder criteriaBuilder = entitásManager.getCriteriaBuilder (); CriteriaQuery criterQuery = criterBuilder.createQuery (Item.class); Root itemRoot = feltételekQuery.from (Item.class); Predikátum predikátumForBlueColor = feltételekBuilder.equal (itemRoot.get ("color"), "red"); Predikátum predikátumForGradeA = feltételekBuilder.equal (itemRoot.get ("évfolyam"), "D"); Predikátum predikátumForBlueColorAndGradeA = feltételekBuilder.and (predikátumForBlueColor, predikátumForGradeA); Predikátum predikátumForRedColor = feltételekBuilder.equal (itemRoot.get ("color"), "kék"); Predikátum predikátumForGradeB = feltételekBuilder.equal (itemRoot.get ("évfolyam"), "B"); Predikátum predikátumForRedColorAndGradeB = feltételekBuilder.and (predikátumForRedColor, predikátumForGradeB); Predicate finalPredicate = criteriaBuilder .vagy (predicateForBlueColorAndGradeA, predicateForRedColorAndGradeB); feltételekQuery.where (finalPredicate); Lista elemek = entitásManager.createQuery (feltételekQuery) .getResultList ();

5. Következtetés

Ebben az oktatóanyagban a JPA Criteria API-t használtuk olyan felhasználási esetek megvalósításához, amelyekben az ÉS / VAGY predikátumokat kellett kombinálni.

Szokás szerint az oktatóanyaghoz használt teljes forráskód befejeződött a GitHubon.