Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在序列生成器中将allocateSize设置为1是否与使用标识生成器相同?_Java_Hibernate_Jpa_Sequence Generators - Fatal编程技术网

Java 在序列生成器中将allocateSize设置为1是否与使用标识生成器相同?

Java 在序列生成器中将allocateSize设置为1是否与使用标识生成器相同?,java,hibernate,jpa,sequence-generators,Java,Hibernate,Jpa,Sequence Generators,我从Identity generator转到Sequence,希望它能提高批量插入的性能。我使用JPA EntityManager的persist方法进行批量插入,批量大小为50。插入高达300K的记录 实体表具有主键列-id的以下设置: @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="myseq") @SequenceGenerator(name="myseq", sequenceName="my_table

我从Identity generator转到Sequence,希望它能提高批量插入的性能。我使用JPA EntityManager的persist方法进行批量插入,批量大小为50。插入高达300K的记录

实体表具有主键列-id的以下设置:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="myseq")
@SequenceGenerator(name="myseq", sequenceName="my_table_id_seq", allocationSize = 1)
private Long id;
早些时候,当我使用allocationSize作为默认值50,并使用此属性--“hibernate.id.new_generator_mappings”-(将其设置为true)时,我遇到了一些问题,例如-batch entry 0 insert to hibernate,use getNextException()


因此,我将allocationSize更改为1。从那时起,我没有看到上述问题。但是,这并没有像分配大小为50那样提高性能。但由于allocationSize为50,这也会导致新ID和已经存在的ID之间出现巨大的差距。

如果在此处使用allocationSize,则每个实体都需要执行“select SEQ.nextval from DUAL”以从指定序列中获取ID。这是你的大记录的问题

您需要在hibernate中设置如下属性:

properties.setProperty("hibernate.id.new_generator_mappings", Boolean.toString(true));

我意识到Hibernate增加了太多的开销。刚刚使用JdbcTemplate进行了超过100万次的插入,效果非常好:)


只有当数据负载不是那么大的时候,我才会使用hibernate

使用Hi-Lo generator,当您定义并将其保存在缓存中时,它会得到100或50。。因此,性能将得到提高