我正在浏览Hibernate参考指南的Id生成部分和"使用Hibernate的java持久性"
Hibernate和JPA结合使用有很多选项.
我正在寻找有关如何选择特定id生成策略的进一步文档.
我也在寻找引爆点.
例如,希望hilo策略可以减少争用.我假设必须有与此选择相关的权衡.
我希望接受有关权衡的教育.
有没有可用的文献?
我已经配置了hibernate来使用oracle序列.使用cache = 20,increment = 1创建序列.
一切正常,hibernate持久化实体.id值很奇怪:50,51 .... 76,201,202 ... 209,1008,1009,5129,5130 ....
如果我要求序列值(从双重中选择hibernate_sequence.nextval),我得到的值就像2,3,4 ....
如果我打开hibernate sql debug,有时间调用"从双重选择hibernate_sequence.nextval",但是由hibernate分配给ID的号码不会按顺序中继!
@Id
@Column(name = "ID", insertable = false, updatable = false)
@SequenceGenerator(name = "SequenceIdGenerator", sequenceName = "HIBERNATE_SEQUENCE")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SequenceIdGenerator")
private Long id;
Run Code Online (Sandbox Code Playgroud) 我想讨论一下 Google Meet ID 是如何生成的。正如我们所知,生成唯一的、不可迭代的 ID 的最佳方法可能是使用 UUID。然而,Google Meet 使用完全不同的方法来生成 ID。看来 Google Meet 只是使用 10 个字母长的随机字符串作为 Meet ID。
ID背后是否有任何特殊算法,或者只是随机字符串?
我有hibernate映射xml文件的这一部分,我正在寻找本机意味着什么的一个很好的例子.
<hibernate-mapping>
 <class name="com.hib.Task" table="tasks">
  <id name="id" type="int" column="id" >
   <generator class="native"/>
  </id>
Run Code Online (Sandbox Code Playgroud)
我知道它与唯一标识符属性有关,但我真的想有一个例子.
对不起新手问题,我是新手一般的hibernate和编程:)谢谢!
我有一个配置为ID的hibernate实体
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Run Code Online (Sandbox Code Playgroud)
第一次运行时,新元素的创建工作正常.但是,如果我重新启动我的应用程序并检索回记录,下次当我尝试持久保存此实体时,hibernate会尝试使用在未重新启动应用程序时生成的相同ID.
我收到下面的错误,当使用trace选项运行时,我能够看到ID正在被重用
*Hibernate:插入org_myEntity(entitiyJID,entitityName,id)值(?,?,?)org.hibernate.util.JDBCExceptionReporter
SQL错误:20000,SQLState:23505 org.hibernate.util.JDBCExceptionReporter语句已中止,因为它会已在"TABLE_NAME"上定义的"SQL120725164357680"标识的唯一或主键约束或唯一索引中导致重复键值.org.hibernate.event.def.AbstractFlushingEventListener
无法与会话同步数据库状态org.hibernate.exception.ConstraintViolationException:无法*
顺便说一句,我使用的是hibernate 3.3.2.GA,javax.persistance 2.0.0和Derby 10.5.1数据库
有人知道我这一代可能出现什么问题,我该如何解决?
有人知道如何为hibernate创建自定义ID生成器的一些很好的教程吗?
我创建了一个 Oracle 序列:
创建序列 seq_acteurs 以 1 递增 1 开始;
通常序列必须递增 1,但插入Acteurstable 时,序列s递增 50!这似乎不合逻辑。为什么会这样?
任何帮助都会得到很大的帮助。
我需要通过Hibernate将许多实体插入到数据库中.所以,我想找到最有效的Id生成算法.
因此,Hibernate Documentation存在四种广泛使用的生成策略:
我应该使用MySQL数据库,所以我不能应用SEQUENCE生成策略.其他策略怎么样?从性能的角度来看效率最高的是什么?
我正在阅读:https : //instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c
在上一节“解决方案”中,他们根据数据库的自动增量功能+历时以来的毫秒数+分片ID生成全局唯一的ID。
为什么我们需要在其中附加分片ID?
具体来说,它说
接下来,我们为要插入的特定数据获取分片ID。假设我们要通过用户ID进行分片,并且有2000个逻辑分片。如果我们的用户ID为31341,则分片ID为31341%2000->1341。我们用该值填充接下来的13位
这没有任何意义:如果您已经通过碎片数量(31341%2000)来修改用户ID,则意味着1)您已经具有用户ID!2)您已经知道mod功能所属的分片!
我在这里误会什么?
我们在更新到 Spring Boot 2.2 和相关的 Hibernate 5.4.x 时遇到了问题。
我们确实有以下序列生成器
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hilo_sequence_generator")
@GenericGenerator(
        name = "hilo_sequence_generator",
        strategy = "...",
        parameters = {
                @Parameter(name = "sequence_name", value = "XXX_SEQUENCE"),
                @Parameter(name = "initial_value", value = "1"),
                @Parameter(name = "increment_size", value = "10"),
                @Parameter(name = "optimizer", value = "hilo")
        })
private Long id;
Run Code Online (Sandbox Code Playgroud)
随着更新到 SB 2.2 / HB 5.4,我们得到以下初始化错误
org.hibernate.MappingException: The increment size of the sequence is set to [10] in the entity mapping while the associated database sequence …Run Code Online (Sandbox Code Playgroud) id-generation ×10
hibernate ×7
java ×3
jpa ×2
annotations ×1
database ×1
facebook ×1
google-meet ×1
instagram ×1
mysql ×1
oracle10g ×1
performance ×1
primary-key ×1
sequence ×1
sequences ×1
sharding ×1
spring-boot ×1