【问题标题】:JPA concatenate STRING column values into a single value just like an aggregate functionJPA 将 STRING 列值连接成单个值,就像聚合函数一样
【发布时间】:2014-06-24 15:01:50
【问题描述】:

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

【问题讨论】:

    标签: jpa


    【解决方案1】:

    我最近在使用 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_expression
    

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

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

    使用 function_invocation 语法的应用程序不能跨数据库移植。

    例子:

    SELECT c
    FROM Customer c
    WHERE FUNCTION(‘hasGoodCredit’, c.balance, c.creditLimit)
    

    参考:Java Persistence 2.1, Final Release

    【讨论】:

    • QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode 尝试这样做时出现以下错误!
    • @SPS 你能用生成错误的代码发布一个新问题吗?随时在 cmets 中发回此新问题的链接。
    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多