JPA/Hibernate 批量插入速度慢

4

我正在使用Hibernate作为provider,通过JPA进行批量插入。数据库是Oracle。它创建了一个序列生成器,每次执行插入操作时都会查询下一个值。如果我要进行1000次插入,那么它就会查询1000次序列生成器。有没有什么方法可以加快速度,同时仍然使用JPA?

2个回答

8

在JPA的@SequenceGenerator中使用allocationSize

请参考以下示例,将其设置为150:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MY_ENTITY_SEQ")
@SequenceGenerator(name = "MY_ENTITY_SEQ", sequenceName = "MY_ENTITY_SEQ", allocationSize = 150)
@Column(name = "MY_ENTITY", nullable = false)
private Long id;

非常好的答案,它终于加速了我的批量插入到MySQL中。大大减少了JDBC连接和语句的使用,这些都是用来从序列选择的(插入已经在批处理中了,但仍然非常慢)。感谢您指出这一点! - Dmitriy Popov

2

使用序列预分配功能进行尝试:

序列对象提供了最佳的排序选项,因为它们是最有效率并且具有最好的并发性能,但是它们是最不可移植的,因为大多数数据库不支持它们。通过将数据库序列对象上的INCREMENT设置为序列预分配大小,可以实现序列对象的序列预分配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接