可以 GenerationType.SEQUENCE 优化为不在每次 ID 更新时执行序列查询吗?

Can be GenerationType.SEQUENCE optimized to not to perform query to sequence on every ID update?

当我使用

@Id
@GeneratedValue(
    strategy = GenerationType.SEQUENCE
)
private Long id;

这是否意味着,在每个实体创建时,ORM 框架都会查询数据库以更新序列 table?可以优化吗,例如按块?

@GeneratedValue 进一步暴露了一个定义生成器的选项:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_generator")
@SequenceGenerator(name="id_generator", sequenceName = "id_seq", allocationSize=50)
private Long id;

启用此功能,Hibernate 将为每个 session.This 批分配一批 50 个 ID,然后预取 50 个范围,这可以提供更好的性能。

还有一些额外的事情需要考虑,例如,如果会话 closed/killed 过早,我们将丢失分配的序列 ID。

以下deep-dive更多地讨论了caveats/soltions:https://www.jpa-buddy.com/blog/the-ultimate-guide-on-db-generated/