2011-07-11 2 views

ответ

1

Это не поддерживается самой спецификацией JPA, однако некоторые реализации JPA могут обеспечить такое расширение.

Например, в Hibernate вы можете подклассифицировать Dialect и определить таможенные функции SQL, позвонив по номеру registerFunction(). Многие специфические для диалекта функции уже определены таким образом.

1

Можно ли написать & вызов пользовательской функции в JPQL?

Короткий ответ - Нет

Длинный ответ, что родные функции не могут ссылаться в запросах JPQL, а JPQL как очень хорошо определенной грамматики. Например, SELECT, раздел запроса JPQL определено в спецификации JPA, используя BNF обозначения, как:

select_clause :: = SELECT [DISTINCT] select_item {,} * select_item

select_item :: = select_expression [[AS] result_variable]

select_expression :: = single_valued_path_expression | скалярное выражение | aggregate_expression | идентификационный_переменный | ОБЪЕКТ (идентификация_переменная) | constructor_expression

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

constructor_item :: = single_valued_path_expression | scalar_expression | aggregate_expression | identity_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-запросы для вызова пользовательских функций, присутствующих в базе данных.

Смежные вопросы