我喜歡JPA中命名查詢的想法,我想要做靜態查詢,但我經常想從查詢的某個子集中獲取查詢的計數結果以及結果列表。我寧願不寫兩個幾乎相同的NamedQueries。理想情況下,我想擁有的是一樣的東西:有沒有辦法使用結果集來獲得JPA命名查詢的計數大小?
@NamedQuery(name = "getAccounts", query = "SELECT a FROM Account")
.
.
Query q = em.createNamedQuery("getAccounts");
List r = q.setFirstResult(s).setMaxResults(m).getResultList();
int count = q.getCount();
所以我們可以說,m爲10,s爲0,有400行的賬戶。我希望r有一個列表中的10個項目,但我想知道總共有400行。我可以寫一個第二@NamedQuery:
@NamedQuery(name = "getAccountCount", query = "SELECT COUNT(a) FROM Account")
,但它似乎是一個幹違反這樣做,如果我永遠都只是會想計數。在這種簡單的情況下,很容易使兩者保持同步,但如果查詢發生變化,我不得不更新兩個@NamedQueries以使值保持一致。
這裏的常見用例是獲取某些子項,但需要某種方式指示總計數(「顯示400箇中的1-10個」)。
終於可以爲namedQueries工作了!謝謝 – Zavael 2014-06-26 08:39:13
有趣的是,我甚至都不知道在配置註釋時你可以參考靜態決賽。然而,我認爲,不需要兩個單獨的命名查詢的解決方案仍然是理想的。 – aroth 2015-10-08 05:10:38