【问题标题】:JPQL - Update with Multiple where conditionsJPQL - 使用多个 where 条件更新
【发布时间】:2013-07-09 01:03:12
【问题描述】:

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。

【问题讨论】:

  • 不,我不认为,3 个 SQL 更新需要 3 个 JPA 更新。

标签: java hibernate hql where-clause jpql


【解决方案1】:

JPA 2.0 支持大小写表达式。我提供了伪代码,可以做相应的修改。

  • 您可以使用CASE 尝试下面的 JPQL 查询。

    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::= CASE WHEN conditional_expression THEN 标量表达式 ELSE 标量表达式 END

  • 否则,可以尝试 Criteria API 来构建查询。

    when(Expression condition, R result) : 添加一个 案例表达式的 when/then 子句。

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

【讨论】:

  • @KrantMin 对于 CASE 表达式,服务器将只遍历每一行一次,这比为每个条件执行单独的查询要好得多。
猜你喜欢
  • 1970-01-01
  • 2017-12-02
  • 2015-09-25
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多