!!! Od 1.6.2022 jsem zaměstnán na HPP. Kde? To tady nemůžu napsat (kvůli Compliance). Ale na mém Linkedin účtu (nick: Jirka Pinkas) to určitě najdete. 😁 V současnosti mám volných 10 dní, které mohu alokovat na školení 😊

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

publikováno: 2016-01-18T00:00:00

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.

Reference

Školení mi pomohlo ujasnit si jak má správně probíhat testování kódu, představilo užitečné knihovny a nástroje. Vše bylo podáno zábavnou formou, takže nebyl problém udržet pozornost. Navíc byl výhodou dostatek času na dotazy ohledně probíraných témat.

Certicon
David

Přestože jsem Cčkař, tak jsem se na školení JUnit dozvěděl nové věci. Zejména co se týče metodiky jednotkového testování a některých odborných termínů.

Retia
Jaromír

Jedno z nejlepších školení za poslední roky. Kromě seznámení se Springem apod. mě velmi příjemně překvapila hluboká znalost probírané látky a schopnost ji srozumitelně vysvětlit v případě ad hoc dotazů. Též oceňuji, že jsme se kromě probírané látky dozvěděli i spoustu dalších zajímavých věcí a trendů z IT. A důležitá byla také přátelská atmosféra školení.

Generali a.s.
Jaroslav


Novinky

2024-09-14T00:00:00: Github Copilot & IntelliJ Idea
Novinky v Github Copilot + IntelliJ Idea

2024-08-31T00:00:00: AI & Copilot

2023-12-25T00:00:00: Kubernetes & Prometheus Documentary