带有计算值的JPQL查询?

时间:2015-12-02 10:19:27

标签: jpql

我想在WHERE子句和ORDER BY表达式中使用计算值。在普通的SQL中它看起来像

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,因为计算值并不重要)。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并没有解决问题,将其提取到正确的对象中:

  • 尝试了对象的所有构造函数组合 - 没有运气。
  • 尝试了Tuple.class - 没有运气。

最后我使用了这种方法,然后将oject [0]提取到我真正的Java-Object中:

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];