Oracle 10 Dialect
För Oracle10gDialect använd den här konfigurationen
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate skapar en tabell och 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
Under lagring får den först det nya sekvens-ID:t och skickar det sedan i INSERT
uttalande
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Oracle 12 Dialect
Om du använder Oracle 12 som inbyggt stöder IDENTITY column
det är att föredra att uppgradera till Oracle12cDialect (observera att detta kräver Hibernate 5.3)
Ställ in strategy
till GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Följande tabell skapas - den viktiga delen generated as identity
som tillhandahåller de unika velues. Notera att ingen explicit sequence
krävs för att skapas, hanteras 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 passas inget ID i INFOGA , tilldelas den av Oracle och returneras till sessionen
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Observera att i motsats till Oracle 10 sparar du en tur och retur till databasen.