gpt4 book ai didi

hibernate 。增强的标识符生成器

转载 作者:行者123 更新时间:2023-12-05 01:34:46 24 4
gpt4 key购买 nike

我决定使用满足以下要求的 Hibernate id 生成器:
- 从不同的应用程序(不同的 JVM)访问域时安全的 id 生成
- 使用 id 间隔(不要在每次需要新 ID 时查询数据库)

经过一些调查,我选择了 2 个 hibernate 增强标识符生成器之一,它是

org.hibernate.id.enhanced.TableGenerator



问题是这个算法在数据库中保存的不是下一个可用值,而是下一个可用间隔的结束,所以,假设我有一个增量大小为 10 的 id 生成器,当我请求一个 id 时,我收到了间隔 1 - 10,但现在在数据库中存储的不是值 11,而是 21。通过这种行为,我必须使所有映射到特定表的类的 increment_size 保持相同。为什么它有这种行为?有没有什么办法解决这一问题 ?

最佳答案

org.hibernate.id.enhanced.TableGenerator 定义了一个能够同时生成多个值的表。听起来您试图让它从多个实体的单个值生成标识符。如果您想利用它,这由“segment_value”TableGenerator 配置设置控制。

至于值(value)观,没有什么可以“修复”的。它没有坏。如果您想要不同的行为,请配置不同的行为。这由称为优化器的东西控制,由 TableGenerator 的“优化器”配置设置定义。这在手册中都有介绍:http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#mapping-declaration-id具体参见“5.1.2.3. 增强标识符生成器”和“5.1.2.3.1. 标识符生成器优化”部分。该手册没有讨论所有可用的优化器。听起来你想要的那个叫做“pooled-lo”,就像“pooled”一样,但存储的是lo值而不是高值。

关于 hibernate 。增强的标识符生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com