Oracle 10 Dialect
Voor Oracle10gDialect gebruik deze configuratie
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate maakt een tabel en een reeks aan:
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
Tijdens het opslaan krijgt het eerst de nieuwe sequentie-ID en geeft het vervolgens door in de INSERT
verklaring
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Oracle 12 Dialect
Als u Oracle 12 . gebruikt die native ondersteuning biedt voor IDENTITY column
het verdient de voorkeur om te upgraden naar Oracle12cDialect (merk op dat hiervoor Hibernate 5.3 vereist is)
Stel de strategy
in naar GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
De volgende tabel is gemaakt - het belangrijkste deel wordt generated as identity
die de unieke waarden biedt. Merk op dat er geen expliciete sequence
. is moet worden aangemaakt, wordt intern beheerd.
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Tijdens het opslaan wordt geen ID doorgegeven in de INSERT , het wordt toegewezen door Oracle en teruggestuurd naar de sessie
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Merk op dat u in tegenstelling tot de Oracle 10 één retourtje naar de database bespaart.