【发布时间】:2014-06-24 15:01:50
【问题描述】:
是否可以使用 JPA 拥有一个自定义聚合函数来扩展 concat() 以便将列值连接成单个字符串?
【问题讨论】:
标签: jpa
是否可以使用 JPA 拥有一个自定义聚合函数来扩展 concat() 以便将列值连接成单个字符串?
【问题讨论】:
标签: jpa
我最近在使用 JPA 和 H2 数据库时遇到了同样的问题。我尝试通过函数调用(见下文)从 JPQL 调用 GROUP_CONCAT 函数,但没有成功。最后,我改用了本机查询调用。
但是,JPA 2.1 specifications 提到您可以调用(函数调用)预定义或用户定义的数据库函数,无论是标量还是聚合函数。此后,我通过突出显示相关部分复制了规范中的段落。
4.6.17.3 调用预定义和用户定义的数据库函数
通过
function_invocation语法支持调用除Java Persistence 查询语言的内置函数之外的函数。这包括调用预定义的数据库函数和用户定义的数据库函数。function_invocation::= FUNCTION(function_name {, function_arg}*) function_arg ::= literal | state_valued_path_expression | input_parameter | scalar_expressionfunction_name 参数是一个字符串,表示要调用的数据库函数。参数必须适合要调用的数据库函数。函数的结果必须适合调用上下文。
函数可以是数据库定义的函数或用户定义的函数。 函数可以是标量函数或聚合函数。
使用 function_invocation 语法的应用程序不能跨数据库移植。
例子:
SELECT c FROM Customer c WHERE FUNCTION(‘hasGoodCredit’, c.balance, c.creditLimit)
【讨论】:
QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode 尝试这样做时出现以下错误!