2015-12-02 71 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];