Start here. This is the direct spoken answer to practice first.
Overview
The best query form is the clearest one that expresses the required data shape and produces acceptable SQL.
JPQL queries entities and their mapped attributes, so it is portable across JPA providers and good for clear static entity-oriented queries. Native SQL gives full access to database-specific syntax, functions, windowing, and tuned plans but needs explicit result mapping and reduces portability. The Criteria API builds queries programmatically and is useful for truly dynamic composition, while Spring Data specifications package reusable predicates on top of Criteria.