CriteriaBuilder не вставляет параметр функции - PullRequest
0 голосов
/ 20 сентября 2019

Это запрос гибернации, который я получаю от CriteriaBuilder:

select generatedAlias0 from MyObject as generatedAlias0 where 1=1 order by COLLATION_KEY(lower(generatedAlias0.mycol), :param0) asc

:param0 должен быть проанализирован как UCA400R1, но он проанализирован как :param0.Где проблема?

cb.function("COLLATION_KEY', String.class, cb.lower(orderExpression), cb.literal("UCA400R1"));

1 Ответ

0 голосов
/ 20 сентября 2019

Поведение обусловлено LiteralHandlingMode, который имеет 3 настройки:

АВТО В запросах критериев используются параметры связывания для любого литерала, который не является числовым значением.Это поведение по умолчанию, если конфигурация не указана явно.

BIND Используется для увеличения вероятности кэширования операторов JDBC. Возможно, вы захотите использовать параметры связывания и для числовых значений.Режим BIND будет использовать переменные связывания для любого литерального значения.

INLINE Режим будет вставлять буквенные значения как есть.Чтобы предотвратить внедрение SQL, никогда не используйте INLINE со строковыми переменными.Всегда используйте константы в режиме INLINE.

Чтобы настроить значение по умолчанию, соответственно установите hibernate.criteria.literal_handling_mode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...