✅ Why use HQL? What are its benefits?
Answer:
HQL (Hibernate Query Language) is designed to let you write object-oriented, database-independent queries over your mapped entities. Its main benefits are:
🔹 1) Works with entities, not tables
✅ You write queries using your Java class and property names, not fragile database table or column names.
✅ This makes your code more intuitive and better aligned with your domain model.
🔹 2) Database independence
✅ Hibernate translates HQL into the appropriate SQL dialect for your configured database.
✅ This means you can switch databases (e.g., from MySQL to PostgreSQL) without rewriting your queries.
🔹 3) Type safety & maintenance
✅ Since HQL uses entity properties, your IDE can help you refactor field names across your codebase.
✅ Reduces errors caused by mismatches between database schema and your Java code.
🔹 4) Polymorphic queries
✅ HQL supports inheritance — you can query superclasses or subclasses in your entity hierarchy without writing complex SQL.
🔹 5) Powerful features
✅ Supports joins, subqueries, aggregations (COUNT(), SUM()), GROUP BY, ORDER BY, and more — all on your object model.
✅ Provides named parameters (:paramName) for safer, more readable queries.
🔹 6) Cleaner, more maintainable code
✅ Compared to SQL in code (which hardcodes database structure), HQL leads to cleaner, more maintainable Java applications.
🔹 Example benefit:
If your database column changes from username → user_name, but your Java field remains username, your HQL doesn’t need to change, because it references the entity property, not the column name.
✅ Key takeaway:
HQL lets you write portable, object-oriented, maintainable queries that align with your Java domain model and keep your codebase flexible, reducing coupling to the physical database schema.