Phương ngữ 10 của Oracle
Đối với Oracle10gDialect sử dụng cấu hình này
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate tạo một bảng và một chuỗi:
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) not null,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
create sequence hibernate_sequence
Trong khi lưu trữ, trước tiên hãy lấy ID trình tự mới và hơn là chuyển nó vào INSERT
tuyên bố
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Phương ngữ Oracle 12
Nếu bạn sử dụng Oracle 12 nguyên bản hỗ trợ IDENTITY column
nó được ưu tiên nâng cấp lên Oracle12cDialect (lưu ý rằng điều này yêu cầu Hibernate 5.3)
Đặt strategy
thành GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Bảng sau được tạo - phần quan trọng là generated as identity
cung cấp các khóa cung cấp duy nhất. Lưu ý rằng không có sequence
nào giải thích bắt buộc phải được tạo, nó được quản lý nội bộ.
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Trong khi lưu trữ không có ID nào được chuyển vào INSERT , nó được Oracle gán và trả về phiên
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Lưu ý rằng trái với Oracle 10, bạn lưu một chuyến khứ hồi vào cơ sở dữ liệu.