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序列和主键映射的主要内容,如果未能解决你的问题,请参考以下文章