New documentation
6.3 provides 2 new documentation guides:
-
An introductory Hibernate 6 Guide
-
The Hibernate Query Language syntax and feature guide
Query methods
Hibernate can now generate DAO-style methods for named queries as part of its JPA static metamodel generator.
Take the following entity as an example:
@NamedQuery(name = "#findByTitleAndType",
query = "select book from Book book where book.title like :titlen and book.type = :type")
@Entity
public class Book { ... }
When processed by the metamodel generator, we will now have the following generated into the static metamodel:
class Book_ {
// as normal
...
public static final String QUERY_FIND_BY_TITLE_AND_TYPE = "#findByTitleAndType";
public static List<Book> findByTitleAndType(@Nonnull EntityManager entityManager, String title, Type type) {
return entityManager.createNamedQuery(QUERY_FIND_BY_TITLE_AND_TYPE)
.setParameter("titlePattern", title)
.setParameter("type", type)
.getResultList();
}
}
And the application can then use:
List<Book> books =
Book_.findByTitleAndType(entityManager, titlePattern, Type.BOOK);
There are a lot of capabilities to these query methods; see the Hibernate 6 Guide for a full discussion.
Finder methods
Using the new @Find
annotation, arbitrary methods can now be processed by the generator to create finder methods similar to query methods.
interface Dao {
@Find
Book findBookByIsbn(String isbn);
}
The generator will generate:
class Dao_ {
public static Book findBookByIsbn(@Nonnull EntityManager entityManager, String isbn) {
return entityManager.unwrap(Session.class)
.byNaturalId(Book.class)
.using(Book_.isbn, isbn)
.load();
}
}
Again, there are a lot of capabilities to these finder methods; see the Hibernate 6 Guide for a full discussion.
Community
For additional details, see:
-
the User Guide
-
the Migration Guide
-
the release page
-
the internals report
See the website for getting in touch with us.