Kontaktní osoba:
Ing. Jiří Pinkas
Mobil: +420 774 912 047

Jak na pokročilejší SELECTy v JPA / Hibernate


publikováno: 18.1.2016

Dostal jsem tento dotaz (který také často řeším na školeních): Jak na pokročilejší SELECTy ve Spring Data JPA / Hibernate? Moje odpověď:

Ohledně pokročilejších SELECTů je několik možností v závislosti na tom, co si představujete pod pojmem "pokročilejší":
 
POZNÁMKA: Samozřejmě pokud potřebujete pokročilé SELECTy neustále, tak může být lepší použít místo JPA myBatis nebo JOOQ.
 
  • Klasické spojování tabulek, základní skalární funkce, základní agregační funkce, group by, having i vnořené dotazy (bez klíčového slova "with"): Pomocí anotace @Query, do které se dává HQL (také známé pod zkratkou JPQL): http://docs.jboss.org/hibernate/orm/5.0/userGuide/en-US/html_single/#hql ... mimochodem jde tam taky dát SQL, kritéria (o tom dále) a nejenom SELECT, ale i UPDATE a DELETE (ve spojení s anotací @Modifying) 
  • Dynamicky tvořené SELECTy (například když potřebujeme sestavit SELECT podle toho, co uživatel naklikal ve formuláři): Do třídy s anotací @Service je možné přidat: @PersistenceContext private EntityManager entityManager a Spring dovnitř vloží instanci EntityManagera, který má metodu createQuery, do které se dává HQL / JPQL (a taky má metodu createNativeQuery, do které se dává klasické SQL): https://docs.oracle.com/javaee/6/tutorial/doc/bnbrg.html Tenhle přístup má ale tu nevýhodu, že je náchylný k chybám (protože se spojují Stringy). Proto je lepší použít Criteria nejlépe pomocí této knihovny: http://www.querydsl.com/ (což sice vyžaduje trochu víc znalostí, ale postupem času se tato časová investice vrátí).
  • Pokročilé vlastnosti SQL jako vnořené SELECTy pomocí klíčového slova WITH, analytické funkce apod. Tohle HQL / JPQL neumí a bude nutné to napsat v SQL (nejlepší to je vložit do souboru META-INF/orm.xml aby to nebylo v kódu repozitáře (SQLko má tendenci bobtnat): http://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-creating-database-queries-with-named-queries/ (asi v polovině stránky).
  • Udělat view a namapovat ho jako entitu.




comments powered by Disqus


Reference

" Co dodat? Byl to super kurz. Pěkné pochopitelné příklady k vybrané problematice. Rychlost školitele optimální, vše se dalo pěkně stíhat. Pokud účastník nevěděl nebo udělal chybu a nevěděl, tak školitel " podrobnosti ...

Michal

" S kurzem jsem byl maximálně spokojen. Na přednášejícím bylo vidět, že ví o čem mluví a dokázal zaujmout, i v případě neporozumění ochotně pomohl a danému člověku problém osvětlil. Rozhodně " podrobnosti ...

Josef

Embedit

" Java kurz byl pro mě velmi přínosný. Jiří je skvělý školitel, který dělá přesně to, co ho baví a na přístupu to bylo každý den velmi znát. Školení bych doporučil " podrobnosti ...

Filip


Novinky

OpenSlava 2017

Konference OpenSlava se bude konat v Bratislavě 5 - 6. října 2017 více ...

Dvoudenní školení Docker

Školení Docker povyrostlo na dvoudenní školení. více ...

Nové datum vydání Java 9: 21.9.2017

Mark Reinhold aktualizoval datum GA (General Availability) Java 9 na 21.9.2017. více ...

Juergen Hoeller v Brně (jeden z autorů Spring frameworku)! 15.3.2017

15.3.2017, 18:00, Brno, Smetanova 19. Nutná rezervace místa! více ...

Bilance Java školení 2016

Co se mi (ne)povedlo v roce 2016 a plány na rok 2017 více ...

Oracle se prý v roce 2017 zaměří na vynucení Java licencí a pokutování zákazníků

Jak nedostat od Oracle pokutu za komerční použití Javy? více ...