我知道关于这一论点有很多类似的问题,但我真的需要一个可行的解决方案。
我正在尝试配置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
但没有成功。我监视了数据库,并将记录逐个持久化到表中,而不是像我配置的那样按100x100保存。
更新
具体实现如下:
@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> {
}
3条答案
按热度按时间11dmarpk1#
在我的例子中,即使使用这些配置,批量插入也不起作用。
原来,如果实体使用
GenerationType.IDENTITY
标识符生成器,Hibernate将静默禁用批插入/更新。或许这会对其他人有所帮助。
来源:http://kyriakos.anastasakis.net/2015/06/12/batch-inserts-with-spring-data-and-mysql/
我正在使用:
3vpjnl9f2#
尝试按如下方式更改代码:
附言:别忘了打开
spring.jpa.show-sql
查看结果更新
也请查看我关于大容量插入的另一个答案:How to do bulk (multi row) inserts with JpaRepository?
disho6za3#
由于MySQL不支持Sequeness,并且为GenerationType.IDENTITY禁用了Hibernate Batch Insert,因此AUTO在您的实体类中手动生成序列: