Sample HQL coding

Post date: Mar 08, 2012 11:37:29 PM

Suppose there are entity classes

@Entity

public class Author {

@Id

private Integer id;

private String firstName;

private String lastName;

@ManyToMany

private List<Book> books;

}

@Entity

public class Book {

@Id

private Integer id;

private String title;

private String isbn;

@ManyToOne

private Publisher publisher;

@ManyToMany

private List<Author> authors;

}

@Entity

public class Publisher {

@Id

private Integer id;

private String name;

private String address;

@OneToMany(mappedBy = "publisher")

private List<Book> books;

}

Then a simple HQL will be look like:

SELECT DISTINCT a FROM Author a INNER JOIN a.books b WHERE b.publisher.name = 'XYZ Press'

Another way to write java using HDL will be look like:

import javax.persistence.EntityManager;

import javax.persistence.Query;

import org.apache.commons.lang.StringUtils;

...

@SuppressWarnings("unchecked")

public List<Author> getAuthorsByLastName(String lastName) {

String queryString = "SELECT a FROM Author a " +

"WHERE :lastName IS NULL OR LOWER(a.lastName) = :lastName";

Query query = getEntityManager().createQuery(queryString);

query.setParameter("lastName", StringUtils.lowerCase(lastName));

return query.getResultList();

}