java - 使用 JPA 和 Spring 批量插入

标签 java spring hibernate jpa

我正在使用 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);

  • 文档说:“如果您使用身份标识符生成器,​​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/

    相关文章:

    java - 句子中元音的降序排列

    java - 在 Java 中使用 "super"和 "?"

    java - 我可以在 Spring Controller 的 Ajax 请求中获取 POJO 吗?

    java - 连接多个表不返回结果

    java - Netbeans 实时/实时更新

    java - 如何管理android手机的硬件

    java - Itext 7 PdfException - "com.itextpdf.kernel.PdfException: Pdf indirect object belongs to other PDF document. Copy object to current pdf document."

    spring - int-ftp :inbound-channel-adapter fetch in sequential order?

    java - Hibernate @OneToMany 注释到底是如何工作的?

    java - Spring + hibernate : No Session Found For Current Thread