我有一个spring boot应用程序,我想在其中使用一个数据库查询插入多个记录:-
public void addEvents() {
String sql = "INSERT INTO Data values(1,'Data 1'), (2,'Data 2'),(3,'Data 3')";
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.createNativeQuery(sql).executeUpdate();
entityManager.getTransaction().commit();
}
实体类:-
@Entity
@Table
public class Data {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
public Data(String name) {
this.name = name;
}
public Data(Integer id, String name) {
this.id = id;
this.name = name;
}
public Data() {
}
}
此处数据是我要插入的实体。我需要在几秒钟内在数据库中插入10000多行。因此,触发单个数据库调用的成本太高。因此,我为此使用了一个查询。此查询是本机查询。谁能告诉我JPA是否提供了现成的API来在单个DB cl中插入多个实体?
答案 0 :(得分:0)
您可以使用spring-data的 saveAll 方法进行批量插入。这是一个代码段,
List<Data> dataList = <10000 records> //You need to prepare batch of 10000
dataRepository.saveAll(dataList) //Spring boot will handle batches automatically.
在application.properties
spring.jpa.properties.hibernate.jdbc.batch_size=100
您可以使用spring.jpa.show-sql
更新: 在pom.xml中添加以下依赖项,
<dependency>
<groupId>com.integralblue</groupId>
<artifactId>log4jdbc-spring-boot-starter</artifactId>
<version>1.0.2</version>
</dependency>
上面的依赖项将在日志中显示是否正在进行批处理。