Oracle 10-Dialekt
Für Oracle10gDialect Verwenden Sie diese Konfiguration
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernate erstellt eine Tabelle und eine Sequenz:
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
Beim Speichern erhält es zuerst die neue Sequenz-ID und übergibt sie dann im INSERT
Erklärung
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Oracle 12 Dialekt
Wenn Sie Oracle 12 verwenden die nativ IDENTITY column
ein Upgrade auf Oracle12cDialect wird bevorzugt (Beachten Sie, dass hierfür Hibernate 5.3 erforderlich ist)
Legen Sie die strategy
fest zu GenerationType.IDENTITY
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
Die folgende Tabelle wird erstellt - der wichtige Teil wird generated as identity
die die eindeutigen Werte bereitstellt. Beachten Sie, dass keine explizite sequence
erstellt werden muss, wird intern verwaltet .
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
Beim Speichern wird im INSERT keine ID übergeben , wird von Oracle zugewiesen und an die Sitzung zurückgegeben
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Beachten Sie, dass Sie im Gegensatz zu Oracle 10 einen Roundtrip zur Datenbank sparen.