Sea*_*oyd 21
您可以使用面向对象的方式或使用更新查询.
面向对象:
public void setNameOfAllEntities(String newname){
List<MyEntity> items =
entityManager.createQuery("from MyEntity", MyEntity.class)
.getResultList();
for(MyEntity entity : items){
entity.setName(newname);
}
}
Run Code Online (Sandbox Code Playgroud)
使用Update Query(未经测试):
public void setNameOfAllEntities(final String newname){
final int changes =
entityManager.createQuery("update MyEntity set name = :name")
.setParameter("name", newname)
.executeUpdate();
System.out.println(changes + " rows changed");
}
Run Code Online (Sandbox Code Playgroud)
显然,第二个版本表现更好.
Pas*_*ent 16
seanizer的答案是正确的(+1),批量更新对于这个用例确实很好.但是您必须采取一些预防措施来进行批量更新操作.解释JPA规范:
因此,我的建议是至少增加版本列以避免与其他线程的并发问题:
UPDATE XYZ xyz
SET xyz.name = :newname, xyz.version = xyz.version + 1
Run Code Online (Sandbox Code Playgroud)
并且在单独的事务中或在加载任何XYZ之前执行它,如前所述.
归档时间: |
|
查看次数: |
27941 次 |
最近记录: |