Dialecte Oracle 10
Pour Oracle10gDialect utiliser cette configuration
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate crée une table et une séquence :
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
Lors du stockage, il obtient d'abord le nouvel ID de séquence, puis le transmet dans le INSERT
déclaration
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Dialecte Oracle 12
Si vous utilisez Oracle 12 qui prend en charge nativement IDENTITY column
il est préférable de passer à Oracle12cDialect (notez que cela nécessite Hibernate 5.3)
Définir la strategy
à GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
La table suivante est créée - la partie importante est generated as identity
qui fournit les valeurs uniques. Notez qu'aucune sequence
explicite doit obligatoirement être créé, il est géré en interne .
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Lors du stockage aucun ID n'est passé dans l'INSERT , il est attribué par Oracle et renvoyé à la session
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Notez que contrairement à l'Oracle 10 vous économisez un aller-retour vers la base de données.