Dialeto do Oracle 10
Para Oracle10gDialect use esta configuração
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
O Hibernate cria uma tabela e uma sequência:
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
Ao armazená-lo, primeiro obtém o novo ID de sequência e depois o passa no
INSERT
declaração select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Dialeto do Oracle 12
Se você usa o Oracle 12 que suporta nativamente
IDENTITY column
é preferível atualizar para Oracle12cDialect (observe que isso requer o Hibernate 5.3) Defina a
strategy
para GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
A tabela a seguir é criada - a parte importante é
generated as identity
que fornece os velues exclusivos. Observe que nenhuma sequence
explícita deve ser criado, ele é gerenciado internamente. create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Ao armazenar nenhum ID é passado no INSERT , ele é atribuído pelo Oracle e retornado à sessão
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Observe que, ao contrário do Oracle 10, você economiza uma viagem de ida e volta ao banco de dados.