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 върна нула.


person Kevin Rave    schedule 10.07.2013    source източник
comment
Не, не мисля, имате нужда от 3 JPA актуализации за 3 SQL актуализации.   -  person    schedule 11.07.2013


Отговори (1)


Регистърът се поддържа в 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

    общ_случай_израз::= CASE WHEN условен_израз THEN скаларен_израз ELSE скаларен_израз END

  • В противен случай можете да опитате Criteria API за изграждане на заявката.

    when(Условие на израз, R резултат) : Добавяне на клауза when/then към израза case.

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

person Nayan Wadekar    schedule 11.07.2013
comment
@KrantMin Сървърът ще премине през всеки ред само веднъж за CASE израз, което е много по-добре, отколкото индивидуалните заявки да се изпълняват за всяко условие. - person Nayan Wadekar; 12.07.2013