【问题标题】:Hibernate and IDs休眠和 ID
【发布时间】:2009-01-29 15:16:14
【问题描述】:

在hibernate中是否有可能拥有一个分配了一些ID并生成一些ID的实体?

例如:

有些对象的 ID 介于 1-10000 之间,是在数据库之外生成的;而有些实体没有 ID,需要数据库生成的 ID。

【问题讨论】:

    标签: sql hibernate jpa


    【解决方案1】:

    您可以使用 'assigned' 作为 ID 生成策略,但您必须在将实体保存到数据库之前为其提供 ID。或者,您可以构建自己的 org.hibernate.id.IdentifierGenerator 实现,以按照您建议的方式提供 Id。

    不过,我必须同意 Cade Roux,这样做似乎比使用内置增量、uuid 或其他形式的 id 生成要困难得多。

    【讨论】:

      【解决方案2】:

      我会避免这种情况,只为有关对象来源的信息提供一个辅助列,并为外部标识符提供一个列(假设外部标识符是您想要跟踪的重要值)。

      将列用于混合用途通常是个坏主意 - 在这种情况下,从代理键的性质推断对象的来源。

      【讨论】:

        【解决方案3】:

        使用您喜欢的任何生成器,确保它可以从偏移开始(当您使用序列时,您可以相应地对其进行初始化)。

        对于所有其他实体,请在插入之前调用 setId()。如果 id 属性为 0,Hibernate 只会生成一个 id。请注意,您应该首先将具有 id 的对象插入到数据库中,然后再使用它们。 Hibernate 中有很多代码在 id != 0 时期望对象在数据库中。

        另一种解决方案是对带有 id 的实体使用负 id。这也将确保您在插入新对象时不会发生冲突。

        【讨论】:

          猜你喜欢
          • 2014-11-25
          • 2015-08-30
          • 2013-09-14
          • 2023-03-11
          • 2012-03-21
          • 2011-07-16
          • 1970-01-01
          • 1970-01-01
          • 2019-03-11
          相关资源
          最近更新 更多