JPQL dotazy jsou stringy — preklep v nazvu entity zjistite az za behu. Criteria API nabizi typove bezpecne dotazy, ktere compiler kontroluje pri kompilaci. Upoviddanejsi, ale bezpecnejsi.
Zaklady¶
CriteriaBuilder pro vytvareni dotazu. CriteriaQuery pro definici SELECT. Root pro FROM. Predicate pro WHERE podminky. TypedQuery pro vykonani.
Metamodel¶
JPA Metamodel generuje staticke tridy (Order_, Customer_) s atributy jako typed fieldy. Misto stringu “orderDate” pouzijete Order_.orderDate. Refaktoring entity automaticky odhali broken dotazy.
Dynamicke dotazy¶
Hlavni sila Criteria API: dynamicke skladani dotazu za behu. Vyhledavaci formular s 10 volitelnymi filtry — v JPQL byste skladali string. V Criteria API pridavate Predicate podminky programaticky.
JPQL vs. Criteria API¶
JPQL: citelnejsi pro jednoduche dotazy. Criteria API: bezpecnejsi pro slozite a dynamicke dotazy. Nase pravidlo: JPQL pro staticke dotazy (@NamedQuery), Criteria API pro dynamicke vyhledavani.
Doporuceni¶
Pouzivejte Metamodel — bez nej je Criteria API jen upovadanejsi JPQL bez vyhod. Generujte metamodel classy pres Maven plugin. Pro staticke dotazy zustadte u JPQL.