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.