Java 为什么OpenJPA集群自动生成ID?

Java 为什么OpenJPA集群自动生成ID?,java,jpa,openjpa,Java,Jpa,Openjpa,我将OpenJPA2.1.0用于注释的持久化逻辑。“我的实体”中的主键注释如下: @Id @GeneratedValue @Column(name = CONVERSATION_ID) private long id; 我意识到生成的ID以某种方式聚集在一起,如1、2、3、11、12、13、21、22、23等 我从OpenJPA文档中了解到,默认情况下会应用GeneratorStrategy.AUTO,具体的生成策略取决于JPA供应商() 不幸的是,我没有找到任何关于如何以及为什么这样做的文档

我将OpenJPA2.1.0用于注释的持久化逻辑。“我的实体”中的主键注释如下:

@Id
@GeneratedValue
@Column(name = CONVERSATION_ID)
private long id;
我意识到生成的ID以某种方式聚集在一起,如1、2、3、11、12、13、21、22、23等

我从OpenJPA文档中了解到,默认情况下会应用
GeneratorStrategy.AUTO
,具体的生成策略取决于JPA供应商()

不幸的是,我没有找到任何关于如何以及为什么这样做的文档。有人能给我指一下正确的方向吗


感谢您在没有策略的情况下使用
@GeneratedValue
注释,OpenJPA默认为自动,并且OpenJPA支持的大多数数据库都使用表生成。默认的allocationSize是50,所以我希望看到您的密钥运行类似于1、2、3、4、5、51、52、53、54101等。这是因为每次重新启动EntityManagerFactory(或应用程序)时,OpenJPA都必须返回数据库以获取另一批密钥

我不知道你为什么会看到10的分配,但我很确定这解释了你所看到的。如果要启用sql跟踪(
openjpa.Log=sql=trace
),您将看到openjpa返回数据库获取密钥