Criteria API - príklad výrazov IN

1. Prehľad

Často sa stretávame s problémami, keď je potrebné dopytovať entity na základe toho, či je atribút s jednou hodnotou členom danej kolekcie.

V tomto výučbe sa naučíme, ako vyriešiť tento problém pomocou Kritériá API.

2. Vzorové entity

Skôr ako začneme, poďme sa pozrieť na entity, ktoré použijeme pri písaní.

Máme Zamestnanec trieda, ktorá má vzťah typu „jedna k jednej“ s a Oddelenie trieda:

@Entity public class DeptEmployee {@Id @GeneratedValue (strategy = GenerationType.SEQUENCE) súkromné ​​dlhé ID; súkromný názov reťazca; @ManyToOne oddelenie súkromného oddelenia; }

Tiež Oddelenie entita, ktorá sa mapuje na viac Zamestnanci:

@Entity Public Class Department {@Id @GeneratedValue (strategy = GenerationType.SEQUENCE) súkromné ​​dlhé ID; súkromné ​​meno reťazca; @OneToMany (mappedBy = "department") zamestnanci súkromného zoznamu; }

3. The CriteriaBuilder.In

Najskôr použijeme CriteriaBuilder rozhranie. The v () metóda prijíma Vyjadrenie a vráti nový Predikát z CriteriaBuilder.In typu. Môže byť použitý na otestovanie, či je daný výraz obsiahnutý v zozname hodnôt:

CriteriaQuery kritériáQuery = kritériaBuilder.createQuery (DeptEmployee.class); Root root = criteriaQuery.from (DeptEmployee.class); V inClause = criteriaBuilder.in (root.get ("title")); pre (Názov reťazca: tituly) {inClause.value (názov); } criteriaQuery.select (root) .where (inClause);

4. The Vyjadrenie

Prípadne môžeme použiť sadu preťažených v () metódy z Vyjadrenie rozhranie:

riteryQuery.select (root) .where (root.get ("title") .in (tituly));

Na rozdiel od CriteriaBuilder.v (), Expression.in () prijíma zbierku hodnôt. Ako vidíme, tiež to trochu zjednodušuje náš kód.

5. IN Výrazy pomocou poddotazov

Doteraz sme používali kolekcie s preddefinovanými hodnotami. Poďme sa teraz pozrieť na príklad, keď je kolekcia odvodená od výstupu poddotazu.

Napríklad môžeme načítať všetky Zamestnanecs ktorí patria do a Oddelenie, so zadaným kľúčovým slovom v názve:

Poddotaz poddotaz = kritériaQuery.subquery (Department.class); Koreňový oddiel = subquery.from (Department.class); subquery.select (odd) riteriaQuery.select (emp) .where (criteriaBuilder.in (emp.get ("department")). value (subquery));

Tu sme vytvorili poddotaz, ktorý bol potom odovzdaný do hodnota () ako výraz na hľadanie Oddelenie subjekt.

6. Záver

V tomto rýchlom článku sme sa naučili rôzne spôsoby, ako dosiahnuť operáciu IN pomocou rozhrania Criteria API. Preskúmali sme tiež, ako používať Criteria API s poddotazmi.

Nakoniec je úplná implementácia tohto tutoriálu k dispozícii na GitHub.


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