2014-09-30 112 views
0

我怎么能说出下面的MySQL查询在JPQL转换MySQL查询JPQL查询

select * from Price WHERE `valueDate` = (SELECT MAX(`valueDate`) FROM Price) and fundId = 2930 

我曾尝试如下:这种办法

"select a from Price a where a.valueDate = select MAX(a.valueDate) and a.fund.id = :" +Price.QUERY_PARAM_FUND_ID 

,但得到的错误:

Caused by: <openjpa-2.3.0-r422266:1540826 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: "Encountered "MAX" at character 50, but expected: ["AND", "GROUP", "HAVING", "OR", "ORDER", <EOF>]." while parsing JPQL "select a from Price a where a.valueDate = select MAX(b.valueDate) from Price b and a.fund.id = :fundId" 
+0

请显示一些努力,显示你已经尝试过。人们会更热衷于帮助,而你的问题更可能保持不变。 – Magnilex 2014-09-30 11:21:19

+0

你好,我已经添加了我的尝试。感谢您的回复 – 2014-09-30 11:24:45

+0

错误是什么?你能把它粘贴在这里吗? – 2014-09-30 11:28:08

回答

0

我认为它会工作,如果你会在子查询之前和之后添加括号。

“从价格选择其中a.valueDate =(SELECT MAX(a.valueDate)的价格)和a.fund.id =” + Price.QUERY_PARAM_FUND_ID

别人让我说一些事情相关来休眠JPA规范的实现。 如果您有名为'Price'的Hibernate模型,那么您将通过该模型执行查询。 HQL将是这样的

try { 
    final StringBuilder qry = new StringBuilder(); 
    qry.append(" SELECT") 
      .append(" FROM Price p") 
      .append(" WHERE p.valueDate = (SELECT MAX(pr.valueDate) FROM Price pr)") 
      .append(" AND p.fundId = :fundId"); 
    return getJpaTemplate().execute(new JpaCallback() { 
     public Object doInJpa(EntityManager em) 
       throws PersistenceException { 
      Query q = em.createQuery(qry.toString()); 
      q.setParameter("fundId", fundId); 
      return q.getResultList(); 
     } 
    }); 
} catch (RuntimeException re) {} 
+0

非常感谢这工作! – 2014-09-30 12:00:07

+0

好@AndreCoetzee玩得很开心 – 2014-09-30 12:02:28