JPAQuery 和 JPAQueryFactory 之间的区别

Difference between JPAQuery and JPAQueryFactory

JPAQuery 和 JPAQueryFactory 有什么区别? 还有,什么时候使用哪个?

根据 querydsl 参考文档:

Both JPAQuery and HibernateQuery implement the JPQLQuery interface.

For the examples of this chapter the queries are created via a JPAQueryFactory instance. JPAQueryFactory should be the preferred option to obtain JPAQuery instances.

但是,我没看清楚。 谁能简单解释一下?

重要的是 Hibernates 查询语言 (HQL) 是 JPA 查询语言 (JPQL) 的超集。 Hibernate 也有一个特殊的方法来转换结果集,并且能够迭代可滚动的结果集,而不需要在内存中保留对所有记录的引用。为了利用这个额外的功能,必须使用 HQLTemplatesHibernateHandler。第一个负责序列化附加类型的表达式,第二个负责与 Hibernates 集成 Query 实现。 HibernateHandler 实际上也是从 HQLTemplates 获得的,所以剩下的就是指定 HQLTemplates.

事实上:JPAQueryTemplates 变量用 HQLTemplates.INSTANCE 实例化,其行为与 HibernateQuery 相同。 FWIW,如果您提供 EntityManager 实例和 JPAQuery 的构造,那么会自动为您的 ORM 供应商推导出 Templates 的适当实现。

所有 JPAQueryFactory 实际上是一个工厂方法,它为新实例化的 JPAQueries 绑定 EntityManagerTemplates 变量。这消除了将这些作为变量单独传递给 JPAQuery.

的每个实例的需要

没有必要使用 JPAQueryFactory,但它可以使您的代码更易于阅读。此外,QueryDSL 网站上的许多代码示例都使用了查询工厂,因此在您自己的代码中将这些示例用作片段可能会更容易。