Dialecto de Oracle 10
Para Oracle10gDialect usar esta configuración
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate crea una tabla y una secuencia:
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
Mientras lo almacena, primero obtiene la nueva ID de secuencia y luego la pasa en INSERT
declaración
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Dialecto de Oracle 12
Si utiliza Oracle 12 que admite de forma nativa IDENTITY column
se prefiere actualizar a Oracle12cDialect (tenga en cuenta que esto requiere Hibernate 5.3)
Establecer la strategy
a GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Se crea la siguiente tabla:la parte importante se generated as identity
que proporciona los valores únicos. Tenga en cuenta que no hay una sequence
explícita se requiere crear, se administra internamente.
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Mientras se almacena no se pasa ningún ID en INSERT , es asignado por Oracle y devuelto a la sesión
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Tenga en cuenta que, a diferencia de Oracle 10, se ahorra un viaje de ida y vuelta a la base de datos.