我是DB / Hibernate的新手,找到了代码:
@SequenceGenerator(name = "entSeq", allocationSize = 5, sequenceName = "CODE_SEQ") ... @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entSeq")
设置主键的序列。
为什么序列用于主键值?解决了哪些目标:
我在下面阅读了有关语法和用法的内容:
但没有找到我的问题的答案。
更新
我很高兴阅读:
显示DB理论中存在如何获得主键的唯一ID的问题。这意味着我可以将插入放入表中而不为我自己的主键提供值:
INSERT INTO suppliers (supplier_id, supplier_name) VALUES (supplier_seq.nextval, 'Kraft Foods');
但我希望所有数据库中都必须存在此功能,而不必强制我提供主键值...
我认为对吗?
UPDATE2:
回答为何使用 START WITH :
将序列添加到现有数据库时,此子句非常有用。当一个旧的计划进入 由应用程序使用并且已经消耗了该子句可以合法范围内的一些值 曾经跳过那些消耗的价值。 MINVALUE和MAXVALUE用于指定合法范围但是 START WITH将启动该范围内的序列使用,以便先前生成的值 不会再出现。
UPDATE3: * 序列 *提供http://en.wikipedia.org/wiki/Surrogate_key
答案 0 :(得分:1)
历史上,有两个主要原因。
Oracle甚至不支持ON UPDATE CASCADE,因此更新外键引用中使用的值比其他平台更麻烦。
这些表现“问题”现在比20年前严重得多,因为同样大小的表格。 (硬件现在要快得多。)但是我们现在似乎比20年前处理的表更大。
这种性能调整存在一些不良副作用。
答案 1 :(得分:0)
您无法依赖所有数据库的自动生成密钥。与大多数其他数据库不同,Oracle不提供可用于生成顺序主键值的自动递增数据类型。
然而,使用序列和触发器可以实现相同的效果。