Jpa 写作及;在JPQL中调用用户定义的函数?

Jpa 写作及;在JPQL中调用用户定义的函数?,jpa,jpql,user-defined-functions,Jpa,Jpql,User Defined Functions,是否可以在JPQL中编写和调用用户定义的函数 是否可以在JPQL中编写和调用用户定义的函数 简而言之,答案是否定的 很长的答案是,本机函数不能在JPQL查询中引用,因为JPQL是一种定义良好的语法。例如,JPQL查询的SELECT子句在JPA规范中使用BNF符号定义为: select_子句::=select[DISTINCT]select_项{,select_项}* 选择项目::=选择表达式[[作为]结果变量] 选择表达式::=单值路径表达式| 标量|表达式|聚合|表达式|标识|变量| 对象(标

是否可以在JPQL中编写和调用用户定义的函数

是否可以在JPQL中编写和调用用户定义的函数

简而言之,答案是否定的

很长的答案是,本机函数不能在JPQL查询中引用,因为JPQL是一种定义良好的语法。例如,JPQL查询的SELECT子句在JPA规范中使用BNF符号定义为:

select_子句::=select[DISTINCT]select_项{,select_项}*

选择项目::=选择表达式[[作为]结果变量]

选择表达式::=单值路径表达式| 标量|表达式|聚合|表达式|标识|变量| 对象(标识_变量)|构造函数_表达式

构造函数\表达式::=新构造函数\名称(构造函数\项{, 构造函数(项目}*)

构造函数\项::=单值\路径\表达式\标量\表达式 |聚合|表达式|标识|变量

聚合|u表达式::={AVG | MAX | MIN | SUM}([DISTINCT] state_field_path_expression)| COUNT([不同] 标识变量状态字段路径表达式| 单值对象路径表达式)


其他语句以类似的方式定义。可以注意到,唯一允许的函数是AVG、MAX、MIN、SUM和COUNT,它们必须出现在聚合表达式的上下文中。JPQL语法中没有用户定义函数的作用域,因此,必须使用本机SQL查询来调用数据库中的用户定义函数。

JPA规范本身不支持它,但是,一些JPA实现可能提供这样的扩展

例如,在Hibernate中,您可以通过调用
registerFunction()
子类a和定义自定义SQL函数。许多特定于方言的函数已经这样定义了