我正在尝试运行以下代码:
public BigDecimal valuate(String searchTerms, String categoryPath) {
Query query = em.createNativeQuery("SELECT SUM(maxBidAmount) / COUNT(maxBidAmount) FROM Item WHERE MATCH(title) AGAINST(':searchTerms') AND categoryPath=':categoryPath'", Double.class);
query.setParameter("searchTerms", searchTerms);
query.setParameter("categoryPath", categoryPath);
double value = (double) query.getSingleResult();
return new BigDecimal(value);
}
当我这样做时,我得到以下例外:
Exception Description: Missing descriptor for [class java.lang.Double].
当我删除Double.class
时,我得到了一个不同的例外。
所以,我只是想知道在JPQL中使用COUNT和SUM的正确方法。
答案 0 :(得分:6)
如果SQL有效,则不需要在查询def中指定Double.class - 只需使用em.createNativeQuery(SQLString); 如果希望JPA提供程序根据结果构建实体,则使用返回类型,但在这种情况下,您需要原始数据。
答案 1 :(得分:0)
本机查询是 SQL ,而不是 JPQL ,您可以像使用RDBMS的任何SQL一样使用这些关键字。 看起来你的JPA提供者不接受Double作为结果类(有些只允许结果类是实体)。
DataNucleus JPA当然允许非实体结果类。