如何从javax.persistence.Query获取查询字符串?

use*_*375 6 java orm jpa query-string

也许我错过了一些东西,但我只想(在我的java程序中)从javax.persistence.Query对象中获取查询字符串?该Query对象本身似乎并不具备这样做的方法.另外我知道我们的经理不希望我们使用Spring框架的东西(例如使用他们的QueryUtils类).

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

tom*_*tom 7

没问题。休眠:

query.unwrap(org.hibernate.Query.class).getQueryString()
Run Code Online (Sandbox Code Playgroud)

或 eclipse 链接

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()
Run Code Online (Sandbox Code Playgroud)

...你明白了...


Dat*_*eus 1

没有 JPA 标准方法,但某些实现有自己的方法。例如 DataNucleus JPA 允许您执行以下操作

query.toString();
Run Code Online (Sandbox Code Playgroud)

Look at the docs of your implementation for how they do it. See also this blog entry http://antoniogoncalves.org/2012/05/24/how-to-get-the-jpqlsql-string-from-a-criteriaquery-in-jpa/