我正在使用Hibernate作为provider,通过JPA进行批量插入。数据库是Oracle。它创建了一个序列生成器,每次执行插入操作时都会查询下一个值。如果我要进行1000次插入,那么它就会查询1000次序列生成器。有没有什么方法可以加快速度,同时仍然使用JPA?
在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;
使用序列预分配功能进行尝试:
序列对象提供了最佳的排序选项,因为它们是最有效率并且具有最好的并发性能,但是它们是最不可移植的,因为大多数数据库不支持它们。通过将数据库序列对象上的INCREMENT设置为序列预分配大小,可以实现序列对象的序列预分配。