2015-05-07 6 views
0

У меня есть кое-что обновление запросов, как этотJPA Заявление Массовое обновление

Update Table name set valstring = ? where valstring = ? and ID in (?) 

Так сделка JPA является

em.CreateNativeQuery(Update_QUERY).setParameter(1, updatedStatus).setParameter(2,currentStatus).setParameter(3,ids).executeUpdate(); 

Входной методу является список идентификаторов, CurrentStatus и updatedStatus

Как передать список как один параметр, если я конвертирую список в разделенную запятыми строку? Я получаю ошибку. Указанный текст не является номером, поскольку строки не разрешены в разделе «В»

+0

зачем использовать «родной запрос», когда JPQL делает UPDATE также –

+0

Я новичок в JPQL так и не смогла найти способ, где я могу передать в список ID, если у вас есть какие-либо предложения, пожалуйста, дайте мне знать – avenirit12

+0

как уже сказал ... используйте JPQL UPDATE и поддерживает ввод списка как значение параметра –

ответ

4

Как передать список в качестве единственного параметра

В качестве примера подход:

String jpql = "UPDATE NameEntity ne " + 
       "SET ne.valstring = :updated_status " + 
       "WHERE ne.valstring = :current_status AND ne.id IN :ids"; 
em.createQuery(jqpl) 
    .setParameter("updated_status", updatedStatus) 
    .setParameter("current_status", currentstatus) 
    .setParameter("ids", Arrays.asList(ids)) 
    .executeUpdate(); 

Три простых правила:

  1. использовать нативные SQL для массового обновления/delete для таблиц, которые являются , а не.

    Собственные запросы SQL работают непосредственно в таблицах базы данных, минуя контекст персистентности (набор управляемых объектов), поэтому безопасно использовать такие запросы, если в данной таблице базы данных нет соответствующего объекта.

  2. Использование JPQL для массового обновления/удаление таблиц, которые отображаются субъекты

    В случае данной таблицы базы данных отображаются субъектом, с помощью обновления SQL/удаления приведет к несогласованности контекста настойчивости и базовая база данных, поэтому вместо этого используйте JQPL-сопоставления, и поставщик сохранения будет заботиться о согласованности.

  3. Массовое обновление/удаление должно выполняться как первая операция в транзакции или идеально в ее собственной транзакции.

+0

Поскольку id объявлен как int в NamedEntity для меня, я получаю элемент значения параметра ошибки, не соответствует ожидаемому типу – avenirit12

+0

Что именно вы перешли на 'ids' в' Arrays.asList (ids) '? – wypieprz

+0

Список был принят – avenirit12

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