This document discusses various techniques for querying data using Java Persistence (JPQL), including:
- Basic JPQL queries to select, find, and load entities
- Navigation through entity relationships and joins
- Extended queries to select individual attributes and construct complex return types
- Native SQL queries for special cases
- Stored procedures to call database functions
- The Criteria API for building type-safe queries programmatically
- QueryDSL as an alternative to define queries using a fluent, dynamic API