侧边栏壁纸
博主头像
进一步,海阔天空 博主等级

进一步,海阔天空

  • 累计撰写 140 篇文章
  • 累计创建 19 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Springboot Jpa实现数据的批量导入

海阔天空
2022-05-28 / 0 评论 / 0 点赞 / 183 阅读 / 0 字

前段时间有个项目需要把geojson数据批量导入到postgres空间数据库中,在没有实现批量导入之前,数据导入非常慢,甚至在导入的
过程中就出错了,所以必须进行优化。

JPA配置文件的修改

首选修改JPA的配置,加入以下几个配置:

spring:
  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.spatial.dialect.postgis.PostgisDialect
        #dialect: org.hibernate.dialect.PostgreSQLDialect
        order_updates: true #需要添加的配置
        order_inserts: true #需要添加的配置
        jdbc:
          batch_size: 100 #需要添加的配置
          batch_versioned_data: true #需要添加的配置

修改数据库实体类

默认情况下,数据库实体类的ID生成方式不能为GenerationType.IDENTITY,在这种情况下,jpa是默认不采用批量方式进行插入或更新的,参考文献里面说是把id生成方式改成GenerationType.SEQUENCE,但是
我发现如果改成这种方式,那么批量插入数据的时候会出现数据丢失的情况,所以干脆直接去掉,自己在代码里面生成objectid。


@Data
class Test {
    @Id
    /*
    本文的参考连接里面说要加这个注解,但是我发现是不能加的,加这个后会出现批量导入时数据丢失的bug,应该是频繁的插入,导致id重复了,JpaRepository中save()方法,当表中id存在就会执行update而不是insert,所以就会出现数据丢失了。
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    */
    @Column(name = "objectid", nullable = false)
    private Integer objectid;
    private String name;
}

最后用saveAll()进行插入或更新即可。

参考文献

0

评论区