【问题标题】:Why does OpenJPA cluster auto generated ids?为什么 OpenJPA 集群会自动生成 id?
【发布时间】:2014-05-12 04:36:12
【问题描述】:

我将 OpenJPA 2.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 供应商 (http://openjpa.apache.org/builds/2.1.0/apache-openjpa-2.1.0/docs/manual/main.html)。

不幸的是,我没有找到任何关于如何以及为什么的文档。谁能指出我正确的方向?

谢谢

【问题讨论】:

    标签: java jpa openjpa


    【解决方案1】:

    当您使用 @GeneratedValue 注释而不使用策略时,OpenJPA 默认为 AUTO 并且 OpenJPA 支持的大多数数据库都使用表生成。默认的 allocationSize 是 50,所以我希望看到您的密钥会变成 1、2、3、4、5、51、52、53、54、101 等。这是因为每次重新启动 EntityManagerFactory(或应用程序)时OpenJPA 必须返回数据库以获取另一批密钥。

    我不确定您为什么看到分配为 10,但我很确定这可以解释您所看到的情况。如果您要启用 sql 跟踪 (openjpa.Log=SQL=trace),您会看到 OpenJPA 返回 DB 以获取密钥。

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 2020-11-10
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 2019-04-22
      相关资源
      最近更新 更多