Hibernate生成的价值策略

And*_*der 8 java sql hibernate hql

我在hibernate中使用此代码.

@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="RightID", unique=true, nullable=false)
Run Code Online (Sandbox Code Playgroud)

问题是,当我删除一行时,'RightId'不会按顺序保留.我想要类似的东西,hibernates应该检查id,如果缺少一些id值,它必须将该值赋予'RightsId'否则继续正常

Pri*_*shi 10

我不认为在hibernate中有任何这样的选择.您也可以尝试以下策略选项,而不是AUTO:

  1. GenerationType.TABLE - 持久性提供程序使用数据库表来管理密钥.

  2. GenerationType.SEQUENCE - 持久性提供程序使用数据库序列进行密钥生成.数据库必须支持Sequences

  3. GenerationType.IDENTITY - 持久性提供程序遵循数据库进行密钥生成.数据库必须支持IDENTITY列类型.

另一点:他们可能没有提供这样的选择,因为它也会降低性能.对于每个插入,它必须搜索整个ID列.您可以想象它会对性能产生多大影响.


Mik*_*unu 5

数据库不在乎序列中是否有空洞。同样,总的来说,更改应用程序设计是可能的,而且很可能是更容易的更改,这样它就不会期望ID值列表不包含漏洞。

如果出于某种奇怪的原因而迫使这种设计,则必须使用自定义生成器。可以通过以下问题找到实现的详细信息:Hibernate ID Generator