我想要澄清这个问题:@GeneratedValue(strategy="IDENTITY") vs. @GeneratedValue(strategy="SEQUENCE") (将近十年的历史发生了什么变化?)
从学习jpa开始,下面的生成类型似乎都自动增加了由1生成的主键。
身份:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;顺序:
@Id
@SequenceGenerator(
name = "my_sequence",
sequenceName = "my_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "my_sequence"
)
private Long id;我了解到,GenerationType.SEQUENCE创建的序列对象并不像GenerationType.IDENTITY那样直接绑定到表。老问题提到,顺序可以更灵活。选择这些策略中的一个而不是另一个有什么客观的利弊?还有什么新的考虑到这个问题的年龄被引用吗?
发布于 2021-03-03 17:19:37
正如hibernate 文档中所述
重要的是要认识到,使用
IDENTITY列会带来运行时行为,其中实体行必须在已知标识符值之前物理插入。 这可能会扰乱扩展的持久性上下文(长对话)。由于运行时强制/不一致,Hibernate建议使用其他形式的标识符值生成(例如序列)。 选择标识生成还有另一个重要的运行时影响: Hibernate将无法使用标识生成为实体批处理INSERT语句。 这一点的重要性取决于应用程序特定的用例。如果应用程序通常不使用标识生成器创建许多给定实体类型的新实例,那么这个限制就不那么重要了,因为批处理无论如何都不会有多大帮助。
https://stackoverflow.com/questions/66461658
复制相似问题