Oracle 10 Dialect
За Oracle10gDialect използвайте тази конфигурация
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate създава таблица и последователност:
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
Докато се съхранява, той първо получава новия ID на последователността и след това го предава в INSERT
изявление
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Oracle 12 Dialect
Ако използвате Oracle 12 който първоначално поддържа IDENTITY column
за предпочитане е да надстроите до Oracle12cDialect (обърнете внимание, че това изисква Hibernate 5.3)
Задайте strategy
към GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Създава се следната таблица - важната част е generated as identity
който осигурява уникалните стойности. Имайте предвид, че няма изрична sequence
трябва да бъде създаден, той се управлява вътрешно .
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
При съхраняване не се предава ID в INSERT , той се присвоява от Oracle и се връща в сесията
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Имайте предвид, че за разлика от Oracle 10 спестявате едно отиване и връщане до базата данни.