前段时间有个项目需要把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;
}
评论区