JPA setParameter при контакте с “НЕ В (: параметрический усилитель)”

Я пытаюсь установить параметр в своем запросе, например:

select * from Cars where Cars.color NOT IN (:color_params)

И когда я добавляю, что параметр в моем JavaClass похож:

...
query.setParameter("color_params", "RED,BLUE");
...

И это не работает, только работает только с одним параметром.
Я попробовал "'RED','BLUE'" и не работает к.

Если я поместил свои параметры в запрос, работает, например:

select * from Cars where Cars.color NOT IN ('RED','BLUE')

Что я делаю неправильно!?

Заранее спасибо

7
задан Taher Khorshidi 7 September 2015 в 05:39
поделиться

2 ответа

Предполагается, что вы должны передать список.

List<String> colors = ....;
String query = "select * from Cars where Cars.color NOT IN (:color_params)";
Map<String, Object> params = new HashMap<String, Object>();
params.put("color_params", colors);
// ... execute the query with the param.

Также можно сделать:

query.setParameter("color_params", colors);

Как правило, часто предпочитается передавать параметры фиксированному запросу, вместо того, чтобы настраивать строку. Преимуществами могут быть:

  1. Уменьшение разбора: Реализация JPA (по крайней мере, Hibernate) требует большого объема работы при разборе каждого запроса. Таким образом, обработанный запрос попадает в кэш для повторного использования. Если строка запроса строится во время выполнения из параметров, она может никогда не быть дважды одинаковой, поэтому теряется много времени, вычислительной мощности и кэш-памяти. Но если вы используете одну и ту же строку запроса с разными параметрами, бинго : быстрый, низкое использование памяти, низкая потребность в вычислительном процессоре.
  2. Предотвращение SQL-инъекции. Эта гарантия предоставляется, если вы используете параметры. Если вы строите строку запроса с параметрами, вы должны предоставить себе эту гарантию ...!
13
ответ дан 6 December 2019 в 14:04
поделиться

Нужно передавать в списке строк, а не одну строку. JPA не разбирает ваши значения, вы должны разделить их сами.

2
ответ дан 6 December 2019 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: