繁体   English   中英

使用JPA和Spring批量插入

[英]Batch Insert with JPA and Spring

我正在使用Spring Framework和JPA将bean插入数据库。 我需要插入将近8000个实体,这可能会延迟太多。

  1. 为什么我应该在Hibernate中禁用“二级缓存” hibernate.cache.use_second_level_cache false

  2. 当我在Hibernate中设置“ hibernate.jdbc.batch_size 20”时,它会像这样插入我的bean吗?

INSERT INTO VALUES (1),(2),(3)...(20);
INSERT INTO VALUES (21),(2),(3)...(40);

  1. 该文档说:“如果使用身份标识符生成器,​​则Hibernate透明地在JDBC级别禁用插入批处理。” 因此,我所有的bean都具有以下配置:

@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private Integer id;

当我在上面使用此标识时,是否禁用了批量插入? 我该如何解决?

在休眠模式下,您不能禁用会话级缓存。 如果您不想要它,请使用StatelessSession 这将不会缓存任何内容。

此外,Hibernate文档指定了如何进行批量插入。 这里

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(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM