Skip to content

Instantly share code, notes, and snippets.

@thjanssen
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thjanssen/f6890a1379e318438795 to your computer and use it in GitHub Desktop.
Save thjanssen/f6890a1379e318438795 to your computer and use it in GitHub Desktop.
Result Set Mapping: Hibernate specific mappings (http://www.thoughts-on-java.org/result-set-mapping-hibernate-specific-mappings)
List<BookValue> results = ((Session)this.em.getDelegate()).createSQLQuery("SELECT b.id, b.title, b.version, a.firstName || ' ' || a.lastName as authorName FROM Book b JOIN Author a ON b.author_id = a.id")
.addScalar("id", StandardBasicTypes.LONG).addScalar("title").addScalar("version", StandardBasicTypes.LONG).addScalar("authorName")
.setResultTransformer(new AliasToBeanResultTransformer(BookValue.class)).list();
results.stream().forEach((book) -> {
System.out.println("Book: ID [" + book.getId() + "] title [" + book.getTitle() + "] authorName [" + book.getAuthorName() + "]");
});
@PersistenceContext
private EntityManager em;
...
public void queryWithAuthorBookCountHibernateMapping() {
Session session = (Session)this.em.getDelegate();
...
}
List<Object[]> results = ((Session)this.em.getDelegate()).createSQLQuery("SELECT {a.*}, count(b.id) as bookCount FROM Book b JOIN Author a ON b.author_id = a.id GROUP BY a.id, a.firstName, a.lastName, a.version").addEntity(Author.class).addScalar("bookCount", StandardBasicTypes.LONG).list();
results.stream().forEach((record) -> {
Author author = (Author) record[0];
Long bookCount = (Long) record[1];
System.out.println("Author: ID [" + author.getId() + "] firstName [" + author.getFirstName() + "] lastName [" + author.getLastName() + "] number of books [" + bookCount + "]");
});
List<Object[]> results = ((Session)this.em.getDelegate()).createSQLQuery("SELECT {b.*}, {a.*} FROM Book b JOIN Author a ON b.author_id = a.id").addEntity("b", Book.class).addEntity("a", Author.class).list();
results.stream().forEach((record) -> {
Book book = (Book) record[0];
Author author = (Author) record[1];
System.out.println("Author: ID [" + author.getId() + "] firstName [" + author.getFirstName() + "] lastName [" + author.getLastName() + "]");
System.out.println("Book: ID [" + book.getId() + "] title[" + book.getTitle() + "]");
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment