首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate GenerationType.IDENTITY与GenerationType.SEQUENCE

Hibernate GenerationType.IDENTITY与GenerationType.SEQUENCE
EN

Stack Overflow用户
提问于 2021-03-03 17:04:12
回答 1查看 2.6K关注 0票数 1

我想要澄清这个问题:@GeneratedValue(strategy="IDENTITY") vs. @GeneratedValue(strategy="SEQUENCE") (将近十年的历史发生了什么变化?)

从学习jpa开始,下面的生成类型似乎都自动增加了由1生成的主键。

身份:

代码语言:javascript
复制
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

顺序:

代码语言:javascript
复制
@Id
@SequenceGenerator(
    name = "my_sequence",
    sequenceName = "my_sequence",
    allocationSize = 1
)
@GeneratedValue(
    strategy = GenerationType.SEQUENCE,
    generator = "my_sequence"
)
private Long id;

我了解到,GenerationType.SEQUENCE创建的序列对象并不像GenerationType.IDENTITY那样直接绑定到表。老问题提到,顺序可以更灵活。选择这些策略中的一个而不是另一个有什么客观的利弊?还有什么新的考虑到这个问题的年龄被引用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 17:19:37

正如hibernate 文档中所述

重要的是要认识到,使用IDENTITY列会带来运行时行为,其中实体行必须在已知标识符值之前物理插入。 这可能会扰乱扩展的持久性上下文(长对话)。由于运行时强制/不一致,Hibernate建议使用其他形式的标识符值生成(例如序列)。 选择标识生成还有另一个重要的运行时影响: Hibernate将无法使用标识生成为实体批处理INSERT语句。 这一点的重要性取决于应用程序特定的用例。如果应用程序通常不使用标识生成器创建许多给定实体类型的新实例,那么这个限制就不那么重要了,因为批处理无论如何都不会有多大帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66461658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档