从JPAQuery获取本机SQL字符串



我使用的是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

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

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

最新更新