Java 从JPAQuery获取本机SQL字符串

Java 从JPAQuery获取本机SQL字符串,java,spring-data-jpa,querydsl,Java,Spring Data Jpa,Querydsl,我使用的是Spring数据JPA+QueryDSL。我创建的动态查询如下所示: JPAQuery<Foo> query = jpaQueryFactory.select(...); 第一个不返回本机sql,但返回JPQL字符串,第二个无法将org.hibernate.query.internal.QueryImpl解压缩到org.eclipse.persistence.jpa.JpaQuery PS:我已经在获取查询之前和之后进行了测试。如果您需要由Querydsl生成的本机SQL

我使用的是Spring数据JPA+QueryDSL。我创建的动态查询如下所示:

JPAQuery<Foo> query = jpaQueryFactory.select(...);
第一个不返回本机sql,但返回JPQL字符串,第二个无法将
org.hibernate.query.internal.QueryImpl
解压缩到
org.eclipse.persistence.jpa.JpaQuery


PS:我已经在获取查询之前和之后进行了测试。

如果您需要由Querydsl生成的本机SQL查询,那么您需要使用SQLQueryFactory而不是JPAQueryFactory。JPAQueryFactory返回的JPQL查询是由JPA而不是Querydsl转换为SQL的。

我想我不喜欢JPA,但没关系。我对Q对象有问题。SQLQueryFactory使用
RelationalPathBase
而不是普通的
EntityPathBase
。我必须如何配置代码生成插件?现在我使用的是
com.querydsl.apt.jpa.JPAAnnotationProcessor
String queryString1 = query.createQuery().unwrap(org.hibernate.query.Query.class).getQueryString();
String queryString2 = query.createQuery().unwrap(org.eclipse.persistence.jpa.JpaQuery.class).getDatabaseQuery().getSQLString();