No — you don’t have to use SELECT in HQL if you want to fetch entire entities. In HQL, you can simply write:
FROM User
This is equivalent to:
SELECT u FROM User u
Hibernate understands both forms — when you omit SELECT, Hibernate implicitly selects the entire entity.
🔹 Examples:
✅ Without SELECT:
String hql = "FROM User";
List<User> users = session.createQuery(hql, User.class).list();
✅ With SELECT:
String hql = "SELECT u FROM User u";
List<User> users = session.createQuery(hql, User.class).list();
🔹 When do you need SELECT?
You must use SELECT if you:
✅ Want to retrieve specific properties (projections), not entire entities:
String hql = "SELECT u.username FROM User u";
List<String> usernames = session.createQuery(hql, String.class).list();
✅ Want to use aggregate functions like COUNT(), SUM(), etc.:
String hql = "SELECT COUNT(u) FROM User u";
Long count = session.createQuery(hql, Long.class).uniqueResult();
✅ Key takeaway:
For entire entities, you can skip SELECT and just write FROM Entity.
For specific fields or aggregates, you must use SELECT.