是否可以写&在JPQL中调用用户定义的函数?
答案 0 :(得分:2)
JPA规范本身并不支持它,但是,一些JPA实现可能会提供这样的扩展。
例如,在Hibernate中,您可以继承Dialect
并通过调用registerFunction()
来定义海关SQL函数。许多方言特定的功能已经以这种方式定义。
答案 1 :(得分:1)
是否可以写&在JPQL中调用用户定义的函数?
简短回答 - 否。
很长的答案是,JPQL查询中不能引用本机函数,因为JPQL是一个非常明确的语法。例如,JPQL查询的SELECT子句在JPA规范中使用BNF表示法定义为:
select_clause :: = SELECT [DISTINCT] select_item {,select_item} *
select_item :: = select_expression [[AS] result_variable]
select_expression :: = single_valued_path_expression | scalar_expression | aggregate_expression | identification_variable | OBJECT(identification_variable)| constructor_expression
constructor_expression :: = new constructor_name(constructor_item {, constructor_item} *)
constructor_item :: = single_valued_path_expression | scalar_expression | aggregate_expression | identification_variable
aggregate_expression :: = {AVG | MAX | MIN | SUM}([DISTINCT] state_field_path_expression)| COUNT([DISTINCT] identification_variable | state_field_path_expression | single_valued_object_path_expression)
其他陈述以类似方式定义。可以注意到,唯一允许的函数是AVG,MAX,MIN,SUM和COUNT,它们必须出现在聚合表达式的上下文中。 JPQL语法中没有用户定义函数的作用域,因此,必须使用本机SQL查询来调用数据库中存在的用户定义函数。