Here is my database structure. Relation many to many. I want to make a selection of authors who have written the same book. With SQL, I did. How do I do with HQL?
Query query = session.createSQLQuery("SELECT FirstName, LastName FROM authors, books, author_book as ab WHERE ab.authorID=authors.authorID AND ab.bookID = books.bookID AND ab.bookID = :id");
query.setInteger("id", 1);
List list = query.list();
Iterator<Object[]> iter = list.iterator();
while (iter.hasNext()) {
Object[] obj = iter.next();
System.out.println(obj[0] + " " + obj[1]);
}
In HQL we perform order by and group by for the given property of entity or associated entities.
The Hibernate Query Language (HQL) and Java Persistence Query Language (JPQL) are both object model focused query languages similar in nature to SQL. JPQL is a heavily-inspired-by subset of HQL. A JPQL query is always a valid HQL query, the reverse is not true however.
Keywords like SELECT, FROM, and WHERE, etc., are not case sensitive, but properties like table and column names are case sensitive in HQL.
Assuming the entity names are Book and Author and that Book has authors attribute:
select a.firstName, a.lastName from Book b join b.authors a where b.id = :id
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With