2014-10-07 70 views
0

我發現this線程非常有幫助,但它看起來像建議中的實現不是很有效率,因爲JPA的本質。查找JPA最新條目

我正在尋找一個解決方案,以獲取最新的分組加入查詢條目,由JPA實現,因此它不是一項簡單的工作。我的實現最後是「ORDER BY DESC」,並且從返回集合中選出第一個,而不是使用必須引入子查詢的MAX()函數,但我不知道這是否是一個好的選擇?

這是由例如從另一個例子進行復雜的查詢我:

"SELECT oo FROM Order AS oo WHERE oo.id IN " + 
    "(SELECT temp.id FROM " + 
     "(SELECT t.order.id AS id, MAX(t.order.orderTime) AS ordTime FROM Transaction t " + 
     "WHERE t.order.name= :name " + 
     "GROUP BY t.order.name) AS temp" + 
    ")"; 

這是我覺得可能是一個很好的選擇,但不知道該查詢:

String query = "SELECT t.order FROM Transaction AS t " + 
    " WHERE t.order.name= :name " + 
    " ORDER BY t.order.orderTime DESC"; 

// and simply just pick up the 1st as the latest entry from result: 
Order order = em.createQueryquery , Order .class).getResultList().get(0); 
+1

檢查空列表將是一個好主意 – 2014-10-07 18:14:35

+0

@Denis Tulskiy會做:)你認爲這是一個很好的做法,找到最新的條目,而不是把所有的東西放在JPQL?我思考'ORDER BY DESC'應該是可靠的 – Dreamer 2014-10-07 18:19:52

回答

2

問題與您的解決方案是,它會加載列表中的所有條目,供您選擇一個。根據this的答案,您需要通過調用query.setMaxResults(1)將結果限制爲1。除此之外,這是一個完美的解決方案。您也可以使用query.getSingleResult()來獲得單個實體,但是如果沒有這樣的記錄,請注意NoResultException

+0

好主意。大拇指爲好的答案! – Dreamer 2014-10-07 18:28:47