2014-04-14 52 views
0

我使用openJPA作爲實現,並且我面臨以下問題。JPA重新執行具有不同參數的相同命名查詢

在我們的服務中,我們使用namedQuery在一個範圍內選擇值,所以這樣的事情:

query = "select xxx from xxx where xxx in (:param)" 

此服務/查詢由另一個進程負責建築/提供這個叫參數值。有時 - 出於不好的原因 - 這個過程給了我們一個長度大於DB2授權的最大長度的列表。

所以我想知道如果我們可以實現mecanism自動將這個參數分成幾個vlaue列表,執行每個內部列表這個namedQuery,然後在返回之前彙總結果。

現在的主要問題是:我可以重複使用多次構建的TypedQuery來重新執行相同的請求,但使用不同的參數值嗎?

代碼示例(對於這個例子,不是一個真正的,也不存在的代碼):

TypedQuery<MyClass> query = em.createNamedQuery("myQueryName", MyClass.class); 
foreach (...) { 
    query.setParameter(...); 
    res = query.getResultList(); 
    // Query re-executed and results are different ? 
} 

它是解決這類問題的正確途徑,如果不是有沒有更好的(在性能項)如何做到這一點?

+0

你可以簡單地把'query'放在while循環中。 – sp00m

+0

當然,當前代碼在循環中獲取查詢,我只是問這個問題,知道它是否可能和更好(或不) – kij

+0

是否沒有其他方式做這個查詢?你能否以更簡單的選擇標準進行聯合?如果我吹起了這個SQL限制,我將會發出警鐘。 –

回答

0

不,你不能那樣做。您必須爲每次執行重新創建TypedQuery

+0

你能擴展你的答案([SVN倉庫](http://svn.apache.org/repos/asf/openjpa/trunk/)中的任何參數/代碼)嗎? –

+0

真的嗎?我可以使用JPA impl重新執行一個命名查詢(DataNucleus JPA),並且所有工作都正常。也許你可以鏈接到JPA規範說這不應該工作? –

+0

我很確定規範沒有解決這一點行爲。 – Rick

相關問題