Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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
javax.persistence.SequenceGenerator.allocationSize()是否应与增量一致?_Java_Oracle_Hibernate_Jpa_Ojdbc - Fatal编程技术网

javax.persistence.SequenceGenerator.allocationSize()是否应与增量一致?

javax.persistence.SequenceGenerator.allocationSize()是否应与增量一致?,java,oracle,hibernate,jpa,ojdbc,Java,Oracle,Hibernate,Jpa,Ojdbc,我在使用Hibernate javax.persistence.SequenceGenerator.allocationSize()属性时遇到问题。当它设置为1时,在向数据库插入大量记录时,我会面临性能问题。否则,当我将其设置为默认值(50)或更高的值时,我会收到具有指定标识符的实体已存在的异常 最大的问题是许多开发人员使用共享数据库,因此生成的标识符很可能不会同步 另一方面,我注意到Oracle序列是使用“增量1”创建的。可以相应地将此设置为allocationSize来解决问题吗 我使用的是

我在使用Hibernate javax.persistence.SequenceGenerator.allocationSize()属性时遇到问题。当它设置为1时,在向数据库插入大量记录时,我会面临性能问题。否则,当我将其设置为默认值(50)或更高的值时,我会收到具有指定标识符的实体已存在的异常

最大的问题是许多开发人员使用共享数据库,因此生成的标识符很可能不会同步

另一方面,我注意到Oracle序列是使用“增量1”创建的。可以相应地将此设置为allocationSize来解决问题吗

我使用的是WildFly 10.1(所以Hibernate版本是5.0.10)和Oracle 12c(12.2.0.1)


提前感谢您的建议

是的,
SequenceGenerator
allocationSize
的值和数据库增加序列的步骤必须相同

如果将
allocationSize
属性设置为50,则告诉Hibernate序列将递增50,并且在从序列中选择下一个值之前,它将在内部生成49个值

如果保持
allocationSize
和序列增量同步,就不必担心重复的ID

比方说;您有两台服务器连接到同一个数据库。两台服务器都使用50的
allocationSize
,您将数据库序列配置为递增50

Server1从序列中请求一个新值并获得1000。它将在内部存储该值,并将其递增,直到达到1049

同时,Server2从序列中请求一个新值并获得1050。它将增加该值直到1099


数据库序列返回的下一个值将是1100。如您所见,不会有重复的ID。但是主键值之间可能存在差距,并且不能使用它们按时间顺序排列数据库记录。但无论如何,您不应该使用主键…

是的。如果它们不一样,你就会遇到这个问题。Increment by是序列的数据库设置,而allocationSize属性是JPA值,告诉它在返回序列进行更多操作之前可以使用多少个数字。