相关疑难解决方法(0)

使用StatelessSession进行批处理

文档

如果我们有一个需要插入1000 000行/对象的情况:

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();
Run Code Online (Sandbox Code Playgroud)

为什么我们应该使用这种方法?与StatelessSession相比,它给我们带来了什么样的好处:

    StatelessSession session = sessionFactory.openStatelessSession();
    Transaction tx = session.beginTransaction();

    for ( int i=0; i<100000; i++ ) {
      Customer customer = new Customer(.....);
      session.insert(customer);
    } …
Run Code Online (Sandbox Code Playgroud)

hibernate batch-processing

17
推荐指数
1
解决办法
3万
查看次数

Spring Data JPA:嵌套实体的批量插入

我有一个测试用例,我需要将100'000个实体实例保存到数据库中.我目前正在使用的代码执行此操作,但最多需要40秒才能将所有数据保留在数据库中.从JSON文件中读取数据,该文件大小约为15 MB.

现在我已经在自定义存储库中为另一个项目实现了批量插入方法.但是,在这种情况下,我有很多顶级实体要坚持,只有几个嵌套实体.

在我目前的情况下,我有5个Job实体,其中包含约30个JobDetail实体的列表.一个JobDetail包含850到1100个JobEnvelope实体.

写入数据库时​​,我Job使用默认save(Iterable<Job> jobs)接口方法提交实体列表.所有嵌套实体都具有CascadeType PERSIST.每个实体都有自己的表.

启用批量插入的常用方法是实现一个自定义方法,例如saveBatch每隔一段时间刷新一次.但在这种情况下我的问题是JobEnvelope实体.我不会将它们与JobEnvelope存储库保持一致,而是让Job实体的存储库处理它.我正在使用MariaDB作为数据库服务器.

所以我的问题归结为以下几点:如何JobRepository批量插入嵌套实体?

这些是我的3个问题:

工作

@Entity
public class Job {
  @Id
  @GeneratedValue
  private int jobId;

  @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST, mappedBy = "job")
  @JsonManagedReference
  private Collection<JobDetail> jobDetails;
}
Run Code Online (Sandbox Code Playgroud)

的JobDetail

@Entity
public class JobDetail {
  @Id
  @GeneratedValue
  private int jobDetailId;

  @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
  @JoinColumn(name = "jobId")
  @JsonBackReference
  private …
Run Code Online (Sandbox Code Playgroud)

java hibernate spring-data-jpa

8
推荐指数
1
解决办法
9433
查看次数