首页 > 解决方案 > JPAQuery 和 JPAQueryFactory 的区别

问题描述

JPAQuery 和 JPAQueryFactory 有什么区别?而且,什么时候用哪个?

根据querydsl参考文档:

JPAQuery 和 HibernateQuery 都实现了 JPQLQuery 接口。

对于本章的示例,查询是通过 JPAQueryFactory 实例创建的。JPAQueryFactory 应该是获取 JPAQuery 实例的首选选项。

但是,我无法理解清楚。谁能简要解释一下?

标签: jpaquerydsl

解决方案


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

事实上: a为变量JPAQuery实例化,其行为与 a 相同。FWIW,如果您提供了一个带有.HQLTemplates.INSTANCETemplatesHibernateQueryEntityManagerJPAQueryTemplates

JPAQueryFactory实际上,是一个工厂方法,它为新实例化的和EntityManager变量Templates绑定JPAQueries。这消除了将这些作为变量单独传递给 a 的每个实例化的需要JPAQuery

不需要使用JPAQueryFactory,但它可以使您的代码更易于阅读。此外,QueryDSL 网站上的许多代码示例都使用查询工厂,因此可以更轻松地将这些示例用作您自己代码中的片段。


推荐阅读