我是 DB/Hibernate 的新手并找到了代码:
@SequenceGenerator(name = "entSeq", allocationSize = 5, sequenceName = "CODE_SEQ") ... @ID @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entSeq")
为主键设置顺序。
为什么序列用于主键的值?解决了哪些目标:
- 提高性能
- 添加约束,一些检查
- 限制ID整数值的可能取值范围,为什么要这样做?
- 为什么要从1开始数?
我在以下内容中阅读了有关语法和用法的信息:
- http://msdn.microsoft.com/en-us/library/ff878091.aspx
- http://www.techonthenet.com/oracle/sequences.php
但没有找到我的问题的答案。
更新:
我喜欢阅读:
其中表明数据库理论存在问题,如何获取主键的唯一 ID。这意味着我可以在不为我自己的主键提供值的情况下插入表:
插入供应商 (供应商 ID,供应商名称) 价值观 (supplier_seq.nextval,“卡夫食品”);
但我希望此功能必须存在于所有数据库中,而不会强迫我提供主键值......
我觉得对吗?
更新2:
回答为什么使用START WITH:
在将序列添加到现有数据库时,此子句很有用。当应用程序正在使用较旧的方案并且已经消耗了合法范围内的一些值时,此子句可用于跳过那些消耗的值。MINVALUE 和 MAXVALUE 用于指定合法范围,但 START WITH 将在该范围内启动序列使用,以便以前生成的值不会再次出现。
UPDATE3: *序列* 提供http://en.wikipedia.org/wiki/Surrogate_key