Dialetto Oracle 10
Per Oracle10gDialect usa questa configurazione
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate crea una tabella e una sequenza:
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
Durante la memorizzazione, prima ottiene il nuovo ID sequenza e poi lo passa nel INSERT
dichiarazione
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Dialetto Oracle 12
Se utilizzi Oracle 12 che supporta in modo nativo IDENTITY column
è preferibile eseguire l'upgrade a Oracle12cDialect (nota che questo richiede Hibernate 5.3)
Imposta la strategy
a GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Viene creata la tabella seguente:la parte importante è generated as identity
che fornisce i valori univoci. Nota che nessuna sequence
esplicita deve essere creato, è gestito internamente.
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Durante la memorizzazione di nessun ID viene trasmesso nell'INSERT , viene assegnato da Oracle e restituito alla sessione
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Nota che, contrariamente a Oracle 10, salvi un viaggio di andata e ritorno nel database.