HQL and Criteria API
Hibernate provides multiple ways to query data:
-
HQL (Hibernate Query Language),
-
Criteria API, and
-
Native SQL.
-
HQL is an object-oriented query language similar to SQL but works with persistent objects instead of database tables.
-
Criteria API offers a type-safe, programmatic way to create queries.
HQL (Hibernate Query Language)
Section titled “HQL (Hibernate Query Language)”// Basic queryQuery<User> query = session.createQuery("FROM User WHERE email = :email", User.class);query.setParameter("email", "john@example.com");List<User> users = query.getResultList();
// Join queryQuery<Object[]> query = session.createQuery( "SELECT u.username, p.productName FROM User u JOIN u.products p WHERE u.id = :userId", Object[].class);
// Native SQLSQLQuery query = session.createSQLQuery("SELECT * FROM users WHERE age > :age");query.addEntity(User.class);query.setParameter("age", 18);Criteria API (Type-safe queries)
Section titled “Criteria API (Type-safe queries)”CriteriaBuilder builder = session.getCriteriaBuilder();CriteriaQuery<User> criteria = builder.createQuery(User.class);Root<User> root = criteria.from(User.class);
// Simple criteriacriteria.select(root).where(builder.equal(root.get("email"), "john@example.com"));
// Complex criteria with joinsJoin<User, Product> products = root.join("products", JoinType.LEFT);criteria.select(root) .where(builder.and( builder.equal(root.get("status"), "ACTIVE"), builder.greaterThan(products.get("price"), 100.0) ));
List<User> users = session.createQuery(criteria).getResultList();