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:
- piros vagy kék színű
ÉS
- 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:
- piros szín és D fokozat
VAGY
- 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.