Oracle序列和主键映射

Posted 关小真

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle序列和主键映射相关的知识,希望对你有一定的参考价值。

前言

每张表都有主键,可分别简单主键和组合主键,简单主键为表中的一列,组合主键为表中的几列。主键的生成策略有许多种,其中,序列是oracle常见的主键生成策略之一。本文主要讲解JPA映射主键的技术细节。其中,主键生成策略是oracle序列,JPA实现是Hibernate。

oracle序列

创建序列

drop sequence testsequence;
Create sequence testsequence Increment by 1 Start with 1 NOMAXVALUE NOMINVALUE Nocycle nocache;

序列testsequence,从1开始递增,每次递增1。不指定最大值、最小值、不循环、不缓存。

创建表

create table TEST
(
  id   NUMBER not null,
  name VARCHAR2(30)
)
;
alter table TEST
  add constraint PK_ID primary key (ID);

create table TEST2
(
  id   NUMBER not null,
  name VARCHAR2(30)
)
;
alter table TEST2
  add constraint PK_TEST2_ID primary key (ID);

创建了两张表,TEST、TEST2。表结构完全一致,简单主键ID,名字name。

创建触发器

CREATE OR REPLACE TRIGGER "TG_TEST" 
BEFORE INSERT ON TEST FOR EACH ROW  WHEN (new.id is null) begin
select testsequence.nextval into:new.id from dual;
end;

/
ALTER TRIGGER "TG_TEST" ENABLE;


CREATE OR REPLACE TRIGGER "TG_TEST2" 
BEFORE INSERT ON TEST2 FOR EACH ROW  WHEN (new.id is null) begin
select testsequence.nextval into:new.id from dual;
end;

/
ALTER TRIGGER "TG_TEST" ENABLE;

定义两张表TEST、TEST2的主键生成策略是序列testsequence。

JPA主键映射

注解

使用JPA映射主键,若主键的生成策略是序列的话,需要使用到四个注解,分别是@Id、@Column、@SequenceGenerator、@GeneratedValue。注解@Id表示该实体属性对应数据库的主键字段,注解@Column表示该实体属性对应数据的字段的名称,@SequenceGenerator定义一个序列, @GeneratedValue应用一个序列。

以上是关于Oracle序列和主键映射的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库主键约束与唯一索引有啥区别?

Oracle一个字段的的外键可以当另一个字段的主键吗

mybatis分页和主键生成

Oracle数据库主键约束与唯一索引有啥区别?

MyBatis-Plus 设置Oracle 自增长序列(Sequence)

mysql里的range分区方式和主键冲突了怎么办?innodb中没有主键会造成啥影响?