有什么方法可以进行批量更新吗?
我创建一个简单的实体
@Entity
@Getter
@Setter
public class A {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "A_ID_GENERATOR")
@SequenceGenerator(name = "A_ID_GENERATOR", sequenceName = "a_id_seq")
private Long id;
private String name;
}
下一步,我生成了10000个A类对象,并将它们放入数据库
下一步,我从数据库中获取A的列表,设置新名称并再次保存
@PutMapping
@Transactional
public String updateAllTest(){
var list=aRepository.findAll();
for (int i = 0; i <list.size() ; i++) {
list.get(i).setName("AA"+i);
}
return "OK";
}
我期待什么?我期待hibernate会进行批量更新hibernate做到了——hibernate统计数据显示——它执行了200个批次(批次大小=500(
接下来我转到数据库日志文件,我在那里看到了什么-没有批处理-只有单个更新-10000行
在没有向JDBC驱动程序添加reWriteBatchedInserts=true的情况下,批处理插入看起来是一样的
那么,有没有办法在postgres中使用hibernate或no进行批量更新呢?
要理解的关键是,对多个执行重用同一个服务器端语句句柄是批处理。日志只是告诉你每一次执行,但这并不意味着它很慢。它正在做它应该做的事情。