Nářečí Oracle 10
Pro Oracle10gDialect použijte tuto konfiguraci
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate vytvoří tabulku a sekvenci:
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
Při ukládání nejprve získá ID nové sekvence a poté jej předá do INSERT
prohlášení
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Nářečí Oracle 12
Pokud používáte Oracle 12 která nativně podporuje IDENTITY column
upřednostňuje se upgrade na Oracle12cDialect (Všimněte si, že to vyžaduje Hibernate 5.3)
Nastavte strategy
na GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Je vytvořena následující tabulka - důležitá část je generated as identity
který poskytuje jedinečné velues. Všimněte si, že žádná explicitní sequence
je nutné vytvořit, je spravován interně .
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Při ukládání není v INSERT předáno žádné ID , je přiřazena společností Oracle a vrácena do relace
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Všimněte si, že na rozdíl od Oracle 10 ušetříte jednu zpáteční cestu do databáze.