也许我遗漏了一些东西,但我只是想(在我的 java 程序中)从javax.persistence.Query
对象中获取查询字符串?Query
对象本身似乎没有这样做的方法。我也知道我们的经理不希望我们使用 Spring 框架的东西(例如使用他们的QueryUtils
类)。
有没有办法简单地从javax.persistence.Query
对象中获取查询字符串(同样,在 java 程序中)?!
也许我遗漏了一些东西,但我只是想(在我的 java 程序中)从javax.persistence.Query
对象中获取查询字符串?Query
对象本身似乎没有这样做的方法。我也知道我们的经理不希望我们使用 Spring 框架的东西(例如使用他们的QueryUtils
类)。
有没有办法简单地从javax.persistence.Query
对象中获取查询字符串(同样,在 java 程序中)?!
没问题。休眠:
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()
……你懂的……
JPA中没有标准方法,
如果您使用的是 EclipseLink,请参阅,
http://wiki.eclipse.org/EclipseLink/FAQ/JPA#How_to_get_the_SQL_for_a_Query.3F
没有 JPA 标准的方法,但一些实现有自己的方法。例如 DataNucleus JPA 允许你做
query.toString();
查看您的实现文档以了解他们是如何做到的。另请参阅此博客条目 http://antoniogoncalves.org/2012/05/24/how-to-get-the-jpqlsql-string-from-a-criteriaquery-in-jpa/
如果 JPA 由 hibernate 提供,请编辑您的持久性属性文件。添加以下部分 -
<property name="hibernate.show_sql" value="true"/>