2013-07-10 3 views
0

Поддерживает ли JPQL следующее обновление?JPQL - обновить с помощью множителя, где условия

Update Person p set p.name = :name_1 where p.id = :id_1, 
        p.name = :name_2 where p.id = :id_2, 
        p.name = :name_3 where p.id = :id_3 

Если нет, есть ли альтернативы? Я пробовал это сам. Но createQuery возвращен null.

+0

Нет, я не думаю, что вам нужно 3 JPA обновления для 3 обновлений SQL. –

ответ

0

Идентификатор случая поддерживается в JPA 2.0. Я предоставил псевдокод, могу внести соответствующие изменения.

  • Вы можете попробовать выполнить запрос JPQL с помощью CASE.

    Update Person p set p.name = CASE WHEN (p.id = :id1) THEN :name_1 WHEN (p.id = :id2) THEN :name_2 WHEN (p.id = :id3) THEN :name_3 END

    general_case_expression :: = СЛУЧАЙ, КОГДА conditional_expression ТО scalar_expression ELSE END scalar_expression

  • Else, можно попробовать Criteria API для построения запроса.

    Когда (выражение, результат R): добавьте , когда/then предложение к выражению case. не

    criteriaBuilder.selectCase().when(criteriaBuilder.equal(person.get("id"), id1), name_1);

+0

Есть ли проблема с производительностью? –

+0

@KrantMin Сервер будет проходить через каждую строку только один раз для выражения CASE, что намного лучше, чем выполнение отдельных запросов, выполняемых для каждого условия. –

+0

Спасибо, @Nayan! –

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