我正在使用 Spring Framework 和 JPA 将 bean 插入到我的数据库中。我需要插入近 8000 个实体,这可能会延迟太多。
为什么要在 Hibernate 中禁用“二级缓存”
hibernate.cache.use_second_level_cache false
当我在 Hibernate 中设置“hibernate.jdbc.batch_size 20”时,它会像这样插入我的 bean 吗?
INSERT INTO VALUES (1),(2),(3)...(20);
INSERT INTO VALUES (21),(2),(3)...(40);
- 文档说:“如果您使用身份标识符生成器,Hibernate 会透明地禁用 JDBC 级别的插入批处理。”。所以,我所有的 bean 都有这样的配置:
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private Integer id;
当我使用上面的这个身份时,批量插入是否被禁用?我该如何解决这个问题?
最佳答案
在 Hibernate 中,您无法禁用 session 级缓存。如果您不需要,请使用 StatelessSession 。这不会缓存任何内容。
此外,Hibernate 文档指定了如何进行批量插入。请参阅here .
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();
关于java - 使用 JPA 和 Spring 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25949777/