可以 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/
当我使用
@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/