2015-12-02 50 views
0

我想在WHERE子句和ORDER BY表達式中使用計算值。在普通的SQL它看起來像帶有計算值的JPQL查詢?

SELECT some, colums, (some arbitrary math) AS calc_value FROM table WHERE calc_value <= ? ORDER BY calc_value 

如果我嘗試在JPQL

entitymanager.createQuery("SELECT e, (some arbitrary math) AS calc_value FROM Entity e WHERE calc_value <= :param ORDER BY calc_value", Entity.class); 

失敗。很明顯,因爲查詢的返回是Entity和calc_value的元組(即Double)。

是否有一種方法可以使用強類型化返回值(即Entity.class,因爲計算出的值無關緊要)將其置入一個查詢中。

+0

嘗試創建一個DTO並返回它:http://stackoverflow.com/questions/2355728/JPQL創建新對象,在選語句,避免或 - 擁抱 –

回答

0

我也曾有過類似的問題,並沒有解決問題,以它獲取到正確的對象:

  • 嘗試對象的所有構造函數的組合 - 沒有運氣。
  • 嘗試Tuple.class - 沒有運氣。

最後,我用這種方法,然後取出oject [0]到我真正的Java對象:

TypedQuery<Object[]> q = em.createQuery("select v, (2 * 4) as temp from MyObject v order by temp", Object[].class); 
List<Object[]> results = q.getResultList(); 

for (Object[] o : results) 
    MyObject mo = (MyObject) o[0];