【问题标题】:Get native SQL string from JPAQuery从 JPAQuery 获取本机 SQL 字符串
【发布时间】:2019-05-11 13:05:05
【问题描述】:

我正在使用 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:我在获取查询之前和之后进行了测试。

【问题讨论】:

    标签: java spring-data-jpa querydsl


    【解决方案1】:

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

    【讨论】:

    • 我想我失去了 jpa 的抱怨,但没关系。我在使用 Q 对象时遇到了麻烦。 SQLQueryFactory 与RelationalPathBase 一起工作,而不是普通的EntityPathBase。我必须如何配置代码生成插件?现在我正在使用com.querydsl.apt.jpa.JPAAnnotationProcessor
    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 2011-02-18
    • 2015-08-06
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多