Java 将mysql查询转换为JPQL查询

Java 将mysql查询转换为JPQL查询,java,mysql,jpa,jpql,Java,Mysql,Jpa,Jpql,如何在JPQL中声明以下mysql查询 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 但在这种方法中会出现

如何在JPQL中声明以下mysql查询

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"

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

从价格a中选择一个,其中a.valueDate=从价格中选择MAXa.valueDate,a.fund.id=:+Price.QUERY\u PARAM\u fund\u id

另外,让我说一些关于JPA规范的hibernate实现的事情。 如果您有一个名为“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) {}

请通过展示你所做的努力来展示你的努力。人们会更热心地提供帮助,你的问题也会更容易被忽略。你好,我已经添加了我的尝试。谢谢你的回答有什么错误?您可以将其粘贴到此处吗?原因:org.apache.openjpa.persistence.ArgumentException:在字符50处遇到MAX,但应为:[AND,GROUP,HAVING,OR,ORDER,]。在解析JPQL时,从价格a中选择a,其中a.valueDate=从价格b中选择MAXb.valueDate,a.fund.id=:fundId.fine@AndreCoetzee祝您玩得愉快