2011-07-11 16 views

答えて

1

JPA仕様自体ではサポートされていませんが、一部のJPA実装ではこのような拡張機能が提供される場合があります。

たとえば、Hibernateではを呼び出してDialectをサブクラス化し、カスタムSQL関数を定義できます。多くの方言固有の関数はすでにこのように定義されています。

1

&コールユーザー定義関数をJPQLで記述することはできますか?

短い答え - 号

長い答えは、ネイティブ関数が非常に明確に定義された文法としてJPQLとして、JPQLクエリで参照することができないことです。例えば、JPQLクエリのSELECT句はBNF表記法を使用してJPA仕様で定義されている:

select_clause :: = SELECT [DISTINCT】たselect_item {たselect_item} *

たselect_item :: =のselect_expression [[AS] result_variable]

select_expression :: = single_valued_pa​​th_expression | scalar_expression | aggregate_expression | identification_variable | OBJECT(識別変数)| constructor_expression

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

constructor_item :: = single_valued_pa​​th_expression | scalar_expression | aggregate_expression | identification_variable

aggregate_expression :: = {AVG |マックス| 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クエリを使用してデータベースに存在するユーザ定義関数を呼び出さなければなりません。

関連する問題