Java 在hibernate中重新启动服务器并使用分配大小时,如何忽略ID之间的间隙?
当我在hibernate中使用allocationsize=10并在db中插入5条记录时,id将为1,2,3,4,5。当我重新启动服务器时,下一个插入id有5个间隙并从11,12,13开始,…有什么办法解决这个问题吗?在id中没有间隙很重要吗? 我搜索并设置Java 在hibernate中重新启动服务器并使用分配大小时,如何忽略ID之间的间隙?,java,hibernate,Java,Hibernate,当我在hibernate中使用allocationsize=10并在db中插入5条记录时,id将为1,2,3,4,5。当我重新启动服务器时,下一个插入id有5个间隙并从11,12,13开始,…有什么办法解决这个问题吗?在id中没有间隙很重要吗? 我搜索并设置 <prop key="hibernate.id.new_generator_mappings">true</prop> spring.xml: <bean id="entityManagerFactoryBe
<prop key="hibernate.id.new_generator_mappings">true</prop>
spring.xml:
<bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="brc.com"/><!--ToPackageAddress-->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!--<prop key="hibernate.hbm2ddl.auto">create-drop</prop>-->
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.id.new_generator_mappings">true</prop>
</props>
</property>
</bean>
因此,在多次搜索之后,我得出结论,没有办法解决这个差距。每次我们重新启动web应用程序或服务器时,如果有分配的ID,它将使差距和顺序增加。 在对db的巨大插入中,最好将序列的分配大小设置为一个更大的数字,并忘记间隙,因为它在将来不会产生问题
在某些特定时刻,我们可以从db和java代码中获取最后一个id,以便将序列返回到最后一个id。但是,如果有许多事务会干扰返回序列,我们只能将分配大小设置为1,或者保存未使用的id,然后在某些代码中使用它们。为什么您会关心序列中的间隔?无论如何,当读取序列的事务回滚下一个值时,您将得到它们。如果您需要该记录的序列值,你不应该依赖合成键来实现这一点。所以没有必要让ID是连续的?这个间隔以后不再重要了?请注意,数百万条记录将被插入到这个数据库中。不,你已经设置了一个最大值,我甚至无法将其输入文字,但让我们假设它没有那么长,假设它是32位,这将给你足够的空间容纳40多亿条记录(如果你只想要正数,则为20多亿条记录),或者64位,这可能会让你直到太阳系的热量耗尽。最坏的情况是,您最终会要求DBA在将来某个日期加宽列,当您处理数十亿行时,即使是数百万行也会产生轻微影响。
<bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="brc.com"/><!--ToPackageAddress-->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!--<prop key="hibernate.hbm2ddl.auto">create-drop</prop>-->
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.id.new_generator_mappings">true</prop>
</props>
</property>
</bean>
SEQUENCE C2 INCREMENT BY 10 MAXVALUE 9999999999999999999999999999 MINVALUE 1 NOCACHE;