Dialekt Oracle 10
Dla Oracle10gDialect użyj tej konfiguracji
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate tworzy tabelę i sekwencję:
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
Podczas zapisywania najpierw otrzymuje nowy identyfikator sekwencji, a następnie przekazuje go w INSERT
oświadczenie
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Dialekt Oracle 12
Jeśli używasz Oracle 12 który natywnie obsługuje IDENTITY column
preferowane jest uaktualnienie do Oracle12cDialect (zauważ, że wymaga to Hibernacji 5.3)
Ustaw strategy
do GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Utworzona jest następująca tabela - ważna część jest generated as identity
co zapewnia unikalne właściwości. Zauważ, że nie ma jawnej sequence
jest wymagane do utworzenia, jest zarządzane wewnętrznie.
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Podczas przechowywania żadny identyfikator nie jest przekazywany do INSERT , jest przypisywany przez Oracle i powraca do sesji
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Pamiętaj, że w przeciwieństwie do Oracle 10 oszczędzasz jedną podróż w obie strony do bazy danych.