JPA将STRING列值连接成单个值,就像聚合函数一样

Cla*_*san 9 jpa

是否可以使用JPA来自定义聚合函数来扩展concat(),以便将列值连接成单个字符串?

Ste*_*han 4

我最近在使用 JPA 和 H2 数据库时遇到了同样的问题。我尝试通过函数调用(见下文)从 JPQL 调用GROUP_CONCAT函数,但没有成功。最后,我改用本机查询调用

\n\n

然而,JPA 2.1 规范提到您可以调用(函数调用)预定义或用户定义的数据库函数,无论是标量函数还是聚合函数。此后我通过突出显示复制了规范中的段落相关部分来复制规范中的该段落。

\n\n
\n

4.6.17.3 预定义和用户定义数据库函数的调用

\n\n

通过语法支持调用Java持久化查询语言内置函数以外的函数function_invocation。这包括调用预定义的数据库函数和用户定义的数据库函数。

\n\n
 function_invocation::= FUNCTION(function_name {, function_arg}*)\n function_arg ::=\n         literal |\n         state_valued_path_expression |\n         input_parameter |\n         scalar_expression\n
Run Code Online (Sandbox Code Playgroud)\n\n

function_name 参数是一个字符串,表示要调用的数据库函数。参数必须适合要调用的数据库函数。函数的结果必须适合调用上下文。

\n\n

该函数可以是数据库定义的函数或用户定义的函数。该函数可以是标量函数或聚合函数

\n\n

使用 function_inplication 语法的应用程序将无法跨数据库移植。

\n\n

例子:

\n\n
SELECT c\nFROM Customer c\nWHERE FUNCTION(\xe2\x80\x98hasGoodCredit\xe2\x80\x99, c.balance, c.creditLimit)\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

参考:Java Persistence 2.1,最终版本

\n