create tablespace tblspace_et datafile 'E:\tablespace\et.dbf' size 100m
autoextend next on 100m
maxsize unlimited;
--创建用户
SQL> create user root identified by root default tablespace tblspace_et temporary tablespace temp;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as SYS
SQL> create tablespace tblspace_et datafile 'E:\tablespace\et.dbf' size 100m
2 autoextend next on 100m
3 maxsize unlimited;
create tablespace tblspace_et datafile 'E:\tablespace\et.dbf' size 100m
autoextend next on 100m
maxsize unlimited
ORA-02491: AUTOEXTEND 子句中缺少要求的关键字 ON 或 OFF
SQL> create tablespace tblspace_et datafile 'E:\tablespace\et.dbf' size 100m
2 autoextend on next 100m
3 maxsize unlimited;
Tablespace created
SQL> create user root identified by root default tablespace tblspace_et temporary tablespace temp;
User created
SQL> grant dba to root;
Grant succeeded
SQL>
CREATE TABLE DEPARTMENT (
ID NUMBER(19,0) DEFAULT '0' NOT NULL,
NAME VARCHAR2(255) NOT NULL,
DESCRIPTION CLOB
);
ALTER TABLE DEPARTMENT ADD CONSTRAINT PRIMARY_0 PRIMARY KEY(ID) ENABLE;
ALTER TABLE DEPARTMENT ADD CONSTRAINT UK_DEPARTMENT_1 UNIQUE (NAME);
CREATE SEQUENCE DEPARTMENT_ID_SEQ MINVALUE 10000 MAXVALUE 999999999999999999999999 INCREMENT BY 1 NOCYCLE;
创建DEPARTMENT表,并为DEPARTMENT表创建一个单独的SEQUENCE,名字为SEQUENCE_ID_SEQ,并不需要创建触发器。
[2]hibernate映射文件的配置:
CREATE TABLE STAFF (
ID NUMBER(19,0) DEFAULT '0' NOT NULL,
NAME VARCHAR2(255) NOT NULL,
AGE NUMBER(3,0) NOT NULL,
BIRTHDAY DATE NOT NULL,
SALARY NUMBER(10,2) NOT NULL,
LEVELNESS FLOAT NOT NULL,
CREATETIME TIMESTAMP NOT NULL,
ENABLE CHAR(2) DEFAULT 'Y' NOT NULL,
STATUS VARCHAR2(64) NOT NULL,
DEPARTMENT_ID NUMBER(19,0)
);
ALTER TABLE STAFF ADD CONSTRAINT PRIMARY_1 PRIMARY KEY(ID) ENABLE;
ALTER TABLE STAFF ADD CONSTRAINT STAFF_IBFK_0 FOREIGN KEY(DEPARTMENT_ID) REFERENCES DEPARTMENT(ID) ENABLE;
ALTER TABLE STAFF ADD CONSTRAINT UK_STAFF_1 UNIQUE (NAME);
CREATE INDEX IDX_STAFF_STATUS ON STAFF(STATUS);
CREATE SEQUENCE HIBERNATE_SEQUENCE
INCREMENT BY 1
MINVALUE 90000
MAXVALUE 999999999999999999999999
NOCYCLE;
CREATE OR REPLACE TRIGGER STAFF_ID_TRG BEFORE INSERT ON STAFF FOR EACH ROW
BEGIN
IF INSERTING AND :NEW.ID IS NULL THEN
SELECT HIBERNATE_SEQUENCE.CURRVAL INTO :NEW.ID FROM DUAL;
END IF;
END;
创建STAFF表,但是并没有为STAFF创建相应的主键sequence,而是创建了一个名字为HIBERNATE_SEQUENCE的 sequence,然后创建一个触发器STAFF_ID_TRG,当执行INSERT操作时,hibernate会先执行一次 HIBERNATE_SEQUENCE.NEXTVAL,所以在触发器中只需要取得HIBERNATE_SEQUENCE.CURRVAL作为新记录的 ID。
[2]hibernate映射文件的配置: