2011-07-11 78 views

回答

1

它不受JPA規範本身的支持,但是,某些JPA實現可能會提供這樣的擴展。

例如,在Hibernate中,您可以繼承Dialect的子類,並通過調用registerFunction()來定義海關SQL函數。許多方言特定的功能已經以這種方式定義。

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_pa​​th_expression | scalar_expression |聚合表達式| identification_variable | OBJECT(identification_variable)| constructor_expression

constructor_expression :: = NEW constructor_name(constructor_item {, constructor_item} *)

constructor_item :: = single_valued_pa​​th_expression |標量表達式 |聚合表達式| identify_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查詢來調用數據庫中存在的用戶定義函數。

相關問題