【问题标题】:how to get query string from a javax.persistence.Query?如何从 javax.persistence.Query 获取查询字符串?
【发布时间】:2012-11-28 16:33:00
【问题描述】:

也许我遗漏了一些东西,但我只是想(在我的 java 程序中)从 javax.persistence.Query 对象中获取查询字符串? Query 对象本身似乎没有办法做到这一点。我也知道我们的经理不希望我们使用 Spring 框架的东西(例如使用他们的 QueryUtils 类)。

有没有办法简单地从javax.persistence.Query 对象中获取查询字符串(同样,在 java 程序中)?!

【问题讨论】:

    标签: java jpa orm query-string


    【解决方案1】:

    没问题。休眠:

    query.unwrap(org.hibernate.Query.class).getQueryString()
    

    或eclipselink

    query.unwrap(JpaQuery.class).getDatabaseQuery().getJPQLString(); // doesn't work for CriteriaQuery query.unwrap(JpaQuery.class).getDatabaseQuery().getSQLString();

    或打开 JPA

    query.unwrap(org.apache.openjpa.persistence.QueryImpl.class).getQueryString()
    

    ……你懂的……

    【讨论】:

      【解决方案2】:

      JPA 中没有标准方法,

      如果您使用的是 EclipseLink,请参阅,

      http://wiki.eclipse.org/EclipseLink/FAQ/JPA#How_to_get_the_SQL_for_a_Query.3F

      【讨论】:

        【解决方案3】:

        没有 JPA 标准的方法,但一些实现有自己的方法。例如 DataNucleus JPA 允许你做

        query.toString();
        

        查看您的实施文档,了解他们是如何做到的。另请参阅此博客条目 http://antoniogoncalves.org/2012/05/24/how-to-get-the-jpqlsql-string-from-a-criteriaquery-in-jpa/

        【讨论】:

        • 这不会返回查询字符串值,而是将对象转换为字符串。例如“org.hibernate.jpa.internal.QueryImpl@”
        【解决方案4】:

        如果 JPA 由 hibernate 提供,请编辑您的持久性属性文件。添加以下部分 -

        <property name="hibernate.show_sql" value="true"/>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-23
          • 2014-01-15
          • 2011-12-19
          • 2012-12-24
          • 1970-01-01
          • 2011-10-18
          相关资源
          最近更新 更多