API kriterija - Primjer IN izraza

1. Pregled

Često nailazimo na probleme u kojima trebamo ispitati entitete na temelju toga je li jednoznačni atribut član dane zbirke.

U ovom uputstvu naučit ćemo kako riješiti ovaj problem pomoću Kriteriji API.

2. Uzorci entiteta

Prije nego što započnemo, pogledajmo entitete koje ćemo koristiti u svom pisanju.

Imamo Zaposlenik odjela razred koji ima mnogo-prema-jedan odnos s a Odjel razred:

@Entity javna klasa DeptE Employee {@Id @GeneratedValue (strategy = GenerationType.SEQUENCE) private long id; privatni naslov niza; @ManyToOne privatni odjel odjela; }

Također, Odjel entitet koji se preslikava na višestruko Zaposlenici odjela:

@ Odjel javne klase entiteta {@Id @GeneratedValue (strategy = GenerationType.SEQUENCE) private long id; privatni naziv niza; @OneToMany (mappedBy = "odjel") privatni popis zaposlenika; }

3. The CriteriaBuilder.In

Prije svega, upotrijebimo CriteriaBuilder sučelje. The u() metoda prihvaća Izraz i vraća novu Predikat od CriteriaBuilder.In tip. Pomoću njega se može provjeriti sadrži li navedeni izraz na popisu vrijednosti:

CriteriaQuery criteriaQuery = criteriaBuilder.createQuery (DeptEfficiee.class); Korijenski korijen = kriterijiQuery.from (DeptEfficiee.class); U inClause = criteriaBuilder.in (root.get ("title")); za (Naslov niza: naslovi) {inClause.value (naslov); } criteriaQuery.select (root) .where (inClause);

4. The Izraz.U

Alternativno, možemo koristiti skup preopterećenih u() metode iz Izraz sučelje:

kriterijiQuery.select (root) .where (root.get ("title") .in (naslovi));

Za razliku od CriteriaBuilder.u(), Expression.in () prihvaća zbirku vrijednosti. Kao što vidimo, također malo pojednostavljuje naš kod.

5. U Izrazi pomoću podupita

Do sada smo koristili zbirke s unaprijed definiranim vrijednostima. Sada, pogledajmo primjer kada je zbirka izvedena iz rezultata podupita.

Na primjer, možemo dohvatiti sve Zaposlenik odjelas koji pripadaju a Odjel, s navedenom ključnom riječi u njihovom imenu:

Podupit podupit = criteriaQuery.subquery (Department.class); Root dept = subquery.from (Department.class); subquery.select (dept) .distinct (true) .where (kriterijiBuilder.like (dept.get ("name"), "%" + searchKey + "%")); kriterijiQuery.select (emp) .where (kriterijiBuilder.in (emp.get ("odjel")). value (podupit));

Ovdje smo stvorili podupit koji je zatim proslijeđen u vrijednost() kao izraz za traženje Odjel entitet.

6. Zaključak

U ovom kratkom članku naučili smo različite načine za postizanje IN operacije pomoću kriterija API. Također smo istražili kako koristiti Criteria API s podupitovima.

Konačno, kompletna implementacija ovog vodiča dostupna je na GitHubu.


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