为什么我的SequenceGenerator跳过id值



我在以下代码中设置了artistId:

@Id
@SequenceGenerator(
name = "artist_sequence",
sequenceName = "artist_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "artist_sequence"
)
private Long artistId;

有人能向我解释一下为什么我的艺人ID有时会跳过价值观,出现问题吗?我注意到,即使我试图将无效的数据插入表中(当抛出异常时),该数据也会被表条目拒绝,但我的artistId将被无形地填充。这将我带到表格中的以下状态:

artist_idfirst_name马瑟
3TupacShakur

听起来像是在使用Oracle数据库。ID是在插入之前生成的,因此如果插入失败,它们就会丢失。此外,当使用服务器集群时,ID的范围会分散到每个服务器,并且在连续插入之间可能会有很大的差异。简单的回答是,您不能依赖于ID是连续的,没有丢失的值。这很可能适用于其他数据库。

这是非常正常的行为。

序列生成器的唯一职责是生成不同的整数值,仅此而已。

这是正常的数据库行为。在每次插入之前都会生成唯一的id,如果事务失败或发生任何其他错误,则会简单地丢弃id。这样做是为了避免Id生成过程变得复杂。

简而言之,序列生成器的唯一目的是生成唯一的ID,所以您不应该担心这个

相关内容

  • 没有找到相关文章

最新更新