查询方法
Hibernate 现在可以在其 JPA 静态元模型生成器中生成命名查询的 DAO 风格方法。
以下是一个实体示例
@NamedQuery(name = "#findByTitleAndType",
query = "select book from Book book where book.title like :titlen and book.type = :type")
@Entity
public class Book { ... }
经过元模型生成器处理后,我们将在静态元模型中生成以下内容
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();
}
}
然后应用程序可以使用
List<Book> books =
Book_.findByTitleAndType(entityManager, titlePattern, Type.BOOK);
这些查询方法有很多功能;请参阅Hibernate 6 指南以获取完整讨论。
查找方法
使用新的 @Find
注解,现在可以由生成器处理任意方法,以创建类似于查询方法的查找方法。
interface Dao {
@Find
Book findBookByIsbn(String isbn);
}
生成器将生成
class Dao_ {
public static Book findBookByIsbn(@Nonnull EntityManager entityManager, String isbn) {
return entityManager.unwrap(Session.class)
.byNaturalId(Book.class)
.using(Book_.isbn, isbn)
.load();
}
}
同样,这些查找方法有很多功能;请参阅Hibernate 6 指南以获取完整讨论。