spring-data-jpa 使用JPA方法通过单个查询插入多个记录

3zwtqj6y  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(157)

我有一个spring Boot 应用程序,我想使用一个DB查询插入多个记录:-

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来在一个数据库cl中插入多个实体吗?

ylamdve6

ylamdve61#

您可以使用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>

以上依赖关系将显示在日志中,如果批处理正在发生或没有。

相关问题