Java JPA查询toString

Java JPA查询toString,java,google-app-engine,orm,jpa,datanucleus,Java,Google App Engine,Orm,Jpa,Datanucleus,我在Google App Engine数据存储上执行一个JPA查询。 我正在使用参数构建查询。 输入所有参数后,我希望查看查询字符串 也就是说,我希望查看数据存储执行的实际查询。 这可能吗? 这对我的调试很有帮助 要解决此问题,请假设以下查询: Query query=EM.createQuery("SELECT FROM " +MyClass.class.getName()+" C WHERE C.field = :arg1"); query.setParameter("arg1", some

我在Google App Engine数据存储上执行一个JPA查询。
我正在使用参数构建查询。
输入所有参数后,我希望查看查询字符串

也就是说,我希望查看数据存储执行的实际查询。
这可能吗? 这对我的调试很有帮助

要解决此问题,请假设以下查询:

Query query=EM.createQuery("SELECT FROM "
+MyClass.class.getName()+" C WHERE C.field = :arg1");
query.setParameter("arg1", someParam);
如果
System.out.println(SomeObj)
prints“从MyClass C中选择,其中C.field=17” 然后问题就解决了

大卫

也就是说,我希望查看数据存储执行的实际查询


DataNucleus.Datastore
log类别启用
DEBUG
。查看文档。

在当前DataNucleus中,您只需调用JPA查询对象上的toString()即可查看单个字符串表单(无需参数替换)。在数据存储上调用的实际查询取决于数据存储(显然),在RDBMS中是SQL,在BigTable中是其他内容。

考虑使用
@NamedQueries
。它们将在启动时由您的提供程序进行检查、缓存,并且不会受到sql注入的攻击。@Willi只要您在查询中使用位置或命名参数,您就可以安全地进行sql注入。对,但是上面的例子使用了字符串连接,这可以避免使用命名查询