Java.Hibernate.Beginner.How can i understad that i use HQL or JPQL ?

🔹 1️⃣ Context of your project

  • JPQL is used if you’re working with JPA (javax.persistence / jakarta.persistence), e.g.:
    • Your project uses JPA annotations (@Entity, @Id, etc.).
    • You create queries using EntityManager.createQuery().
    • You rely on JPA-standard features like @PersistenceContext, @Transactional.

HQL is used if you’re directly working with native Hibernate API, e.g.:

  • Your code uses org.hibernate.Session.createQuery().
  • You don’t use JPA’s EntityManager.

🔹 2️⃣ How you build queries
JPQL

TypedQuery<User> query = entityManager.createQuery(
    "SELECT u FROM User u WHERE u.username = :username", User.class);

Uses JPA EntityManager.

Always JPQL.

HQL

List<User> users = session.createQuery(
    "FROM User u WHERE u.username = :username", User.class).list();

Uses Hibernate Session.

Always HQL.

🔹 3️⃣ Query features

  • If your queries use Hibernate-specific syntax or functions (e.g., index(), elements(), or certain proprietary operators), that’s HQL — JPQL won’t recognize them.

🔹 4️⃣ Are you using JPA-only annotations?

  • If your project uses javax.persistence.EntityManager instead of org.hibernate.Session, you’re definitely in JPQL-land.

🔹 5️⃣ Tools & providers

  • If you run your queries in Spring Data JPA repositories, your @Query strings are JPQL.
  • If you run your queries directly on Hibernate’s Session API, they’re HQL.

🔹 Bottom line:
JPQL → you use JPA’s EntityManager or @Query in Spring Data JPA → fully portable.
HQL → you use Hibernate’s Session API directly → Hibernate-specific.


🔹 Key takeaway:
The simplest way to know:

  • EntityManager → JPQL
  • Session → HQL
This entry was posted in Без рубрики. Bookmark the permalink.

Leave a Reply

Your email address will not be published.