Я знаю, что есть много похожих вопросов по этому аргументу, но мне действительно нужно рабочее решение.
Я пытаюсь настроить Spring Boot и Spring Data JPA, чтобы сделать массовую вставку в пакет.
Цель: зафиксировать каждую N-запись , а не каждую запись при выполнении действия repository.save()
.
То, что я пробовал с тех пор в application.properties
:
spring.jpa.properties.hibernate.jdbc.batch_size=100
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
spring.jpa.properties.hibernate.generate_statistics=true
Но безуспешно.Я наблюдал за базой данных, и записи сохранялись в таблицах по одной, а не по 100 на 100, как я настроил.
ОБНОВЛЕНИЕ
Вот реализация:
@Component
public class BulkInsert {
@Autowired
MyRepository repository;
public void process() {
PodamFactory podamFactory = new PodamFactoryImpl();
for(int i=0;i<10000;i++) {
MyEntity myEntity = podamFactory.manufacturePojo(MyEntity.class);
repository.save(myEntity);
}
}
}
Вот сущность:
@Entity
@Table(name="MYTABLE")
@NamedQuery(name="MyEntity.findAll", query="SELECT m FROM MyEntity m")
public class MyEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="DESCRIPTION")
private String description;
@Id
@Column(name="ID")
private String id;
public MyEntity() {
}
// getters and setters
}
И хранилище:
public interface MyRepository extends CrudRepository<MyEntity, String> {
}