我正在使用Spring Data JPA + QueryDSL。我这样创建动态查询:
JPAQuery<Foo> query = jpaQueryFactory.select(...);
我发现这篇旧文章显示了如何以编程方式检索本机sql字符串:https://antoniogoncalves.org/2012/05/24/how-to-get-the-jpqlsql-string-from-a-criteriaquery-in-jpa/,但对我而言不起作用。
我已经尝试过了:
String queryString1 = query.createQuery().unwrap(org.hibernate.query.Query.class).getQueryString();
String queryString2 = query.createQuery().unwrap(org.eclipse.persistence.jpa.JpaQuery.class).getDatabaseQuery().getSQLString();
第一个不会返回我本机sql,但是会返回JPQL字符串,第二个无法将org.hibernate.query.internal.QueryImpl
解包为org.eclipse.persistence.jpa.JpaQuery
。
PS:我在获取查询之前和之后都进行了测试。
答案 0 :(得分:0)
如果需要由Querydsl生成的本机SQL查询,则需要使用SQLQueryFactory而不是JPAQueryFactory。 JPAQueryFactory返回的JPQL查询是通过JPA而不是Querydsl转换为SQL的。