2010-09-10 65 views
3

我在Google App-Engine數據存儲上執行JPA查詢。
我正在使用參數構建查詢。
所有參數輸入後,我希望查看查詢字符串。JPA Query toString

也就是說,我希望查看數據存儲正在執行的實際查詢。
這甚至可能嗎? 這真的會幫助我調試。

解決問題的,假定以下查詢:

Query query=EM.createQuery("SELECT FROM " 
+MyClass.class.getName()+" C WHERE C.field = :arg1"); 
query.setParameter("arg1", someParam); 

如果System.out.println(SomeObj)打印 'SELECT FROM MyClass的C其中C.field = 17' 那麼問題就解決了。

大衛

+0

考慮使用'@ NamedQueries'。它們將在啓動時由您的提供程序檢查,緩存並且不容易受到sql注入的攻擊。 – whiskeysierra 2010-09-11 17:21:01

+0

@Willi只要您在查詢中使用位置參數或命名參數,就可以安全地處理SQL注入。 – 2010-09-12 09:58:32

+0

沒錯,但上面的例子使用了可以使用命名查詢避免的字符串連接。 – whiskeysierra 2010-09-12 11:41:13

回答

1

也就是說,我想查看數據存儲正在執行的實際查詢。

DataNucleus.Datastore日誌類別啓用DEBUG應該這樣做。檢查DataNucleus Logging文檔。

0

在當前的DataNucleus中,您只需在JPA Query對象上調用toString()即可查看單字符串表單(不帶參數替換)。在數據存儲上調用的實際查詢取決於數據存儲(顯然),在RDBMS的情況下是SQL,而在BigTable的情況下是其他情況。