Oracle 10 Dialect
Til Oracle10gDialect brug denne konfiguration
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate opretter en tabel og en sekvens:
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
Mens den lagres, får den først det nye sekvens-ID og sender det derefter i INSERT
erklæring
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Oracle 12 Dialect
Hvis du bruger Oracle 12 der indbygget understøtter IDENTITY column
det foretrækkes at opgradere til Oracle12cDialect (bemærk, at dette kræver Hibernate 5.3)
Indstil strategy
til GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Følgende tabel er oprettet - den vigtige del er generated as identity
som giver de unikke veluer. Bemærk, at ingen eksplicit sequence
skal oprettes, administreres det internt .
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Under lagring overføres intet ID i INSERT , det tildeles af Oracle og returneres til sessionen
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Bemærk, at i modsætning til Oracle 10 sparer du én tur-retur til databasen.