5.3.4 Sequence生成器@ Sequence

本文介绍如何在Oracle数据库中使用Sequence实现自动主键生成,并详细解释了在Entity中配置Sequence作为主键生成策略的方法,包括创建Sequence、指定主键生成策略及使用@SequenceGenerator标记。
摘要由CSDN通过智能技术生成

在一些特殊的数据库中,比如Oracle中可以使用Sequence来生成自动主键。若要在Entity中使用Sequence作为主键的生成策略,则步骤如下所示。

1)在数据库中创建一个SequenceSQL脚本如下。

CREATE SEQUENCE customer_sequence START WITH 1 INCREMENT BY 10;

这个Sequence1开始,每次增长10

提示:本书采用的MySQL数据库中不支持Sequence,所以此策略不适用于MySQL

2)在Entity标记主键的位置,指定主键生成策略为“GenerationType. SEQUENCE”,具体设置如下。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

 

         private Integer id;

 

         @Id

         @GeneratedValue(strategy = GenerationType.SEQUENCE)

         public Integer getId() {

                   return this.id;

         }

 

         public void setId(Integer id) {

                   this.id = id;

         }

}

3)指定生成主键策略的名称,例如这里命名为“customer_seq”。

         @Id

         @GeneratedValue(strategy = GenerationType. SEQUENCE,generator="customer_seq")

         public Integer getId() {

                   return this.id;

         }

4)使用@ SequenceGenerator标记定义Seqence生成策略的具体设置,代码如下所示。

         @Id

         @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="customer_seq")

         @SequenceGenerator(name="customer_seq",

                            sequenceName="customer_sequence"

         )

         public Integer getId() {

                   return this.id;

         }

 

         public void setId(Integer id) {

                   this.id = id;

         }

注释@SequenceGenerator用于设置主键使用Sequence生成主键的策略,它的定义如下所示。

@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)

public @interface SequenceGenerator {

String name();

String sequenceName() default "";

int initialValue() default 0;

int allocationSize() default 50;

}

在使用此@ SequenceGenerator标记时,需要注意以下几个问题。

l         @ TableGenerator标记类似,@ SequenceGenerator也可以标注在类、属性和方法前,并且作用域是整个persist unit的范围。

l         name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。

l         sequenceName属性值表示数据库中创建的Sequence的名称。

l         initialValue表示主键初识值,默认为0

l         allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值