我想将表中具有列名NAME的表的所有字段更新为“ PCNAME”。 我要更新的表名是XYZ。我只想更新一些字段,而不要保留一些不变。

这将影响多行而不是一行,因为会有很多行带有NAME='PCNAME' 我如何使用JPA做到这一点。我有与此表关联的实体类。

有帮助吗?

解决方案

您可以通过面向对象的方式或使用更新查询来实现。

面向对象: 通用标签

使用更新查询(未经测试): 通用标签

很明显,第二个版本的性能更好。

其他提示

seanizer的答案是正确的(+1)且批量对于此用例,更新确实会很好。但是您必须对批量更新操作采取一些预防措施。解释一下JPA规范:

  • 批量更新绕过乐观锁定检查(因此,如果需要,您必须手动增加版本列和/或手动验证版本列)
  • 持久性上下文不会与批量操作的结果同步(因此,批量操作应在单独的事务中或在事务的开始处执行,然后再加载任何实体的状态,可能会受到影响。)

    因此,我的建议是至少增加版本列,以避免其他线程的并发问题: 通用标签

    并在单独的事务中执行该操作,或者在加载任何XYZ之前执行该操作,

    参考文献
    • JPA 1.0规范
      • 第4.10节“批量更新和删除操作”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top