【问题标题】:How to do group by substring in Eclipselink?如何在 Eclipselink 中按子字符串分组?
【发布时间】:2016-03-29 18:26:53
【问题描述】:

我正在尝试按商店国家/地区对商店进行分组,并查看每个国家/地区有多少家商店。商店国家恰好是商店代码的前 2 个字符。这意味着如果商店代码是“US000010”,则国家/地区是“US”

我的实体对象:

...
public class Store {
    @column(name = "code")
    private String code;
    ...    
}

我的 JPQL 是:

  SELECT substring(s.code, 0, 2),
         count(s) 
    FROM Store s 
GROUP BY substring(s.code, 0, 2)

这一直在抛出我ORA-00979: not a GROUP BY expression,我怀疑这是由于上面的 JPQL 转换为

SELECT SUBSTR(CODE, ?, ?), COUNT(CODE) FROM Store GROUP BY SUBSTR(CODE, ?, ?)

排除其他选择,如创建视图或使用本机查询,有什么方法可以使用 JPQL 在 Eclipselink 中按子字符串执行分组?

【问题讨论】:

  • 您是否尝试为您的子字符串函数结果指定标识符? "select substring(s.code, 0, 2) as mystring, count(s) from Store s group by mystring"?
  • 不起作用。仍然得到同样的错误。 JPQL 仍然转换为看起来相同的 sql。

标签: group-by eclipselink jpql


【解决方案1】:

我最近遇到了类似的问题,按TO_CHAR 函数分组。我找到的解决方案是 ExclipseLink 特定的,它只是为查询设置一个提示:query.setHint(QueryHints.BIND_PARAMETERS, HintValues.FALSE);

将这段代码放在执行查询之前,它不会使用参数,而是直接在发送给JDBC驱动的SQL字符串上替换值

【讨论】:

    猜你喜欢
    • 2012-07-15
    • 2013-12-18
    • 2011-11-20
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多