sql >> Database >  >> RDS >> Oracle

Slaapstand Jpa - beperking schending uitzondering op primaire sleutel (reeks)

Oracle 10 Dialect

Voor Oracle10gDialect gebruik deze configuratie

@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;

Hibernate maakt een tabel en een reeks aan:

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 

Tijdens het opslaan krijgt het eerst de nieuwe sequentie-ID en geeft het vervolgens door in de INSERT verklaring

select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)

Oracle 12 Dialect

Als u Oracle 12 . gebruikt die native ondersteuning biedt voor IDENTITY column het verdient de voorkeur om te upgraden naar Oracle12cDialect (merk op dat hiervoor Hibernate 5.3 vereist is)

Stel de strategy in naar GenerationType.IDENTITY

@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;

De volgende tabel is gemaakt - het belangrijkste deel wordt generated as identity die de unieke waarden biedt. Merk op dat er geen expliciete sequence . is moet worden aangemaakt, wordt intern beheerd.

create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity, 
VALUE varchar2(255 char), 
primary key (MY_PRIMARY_KEY))

Tijdens het opslaan wordt geen ID doorgegeven in de INSERT , het wordt toegewezen door Oracle en teruggestuurd naar de sessie

insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ? 

Merk op dat u in tegenstelling tot de Oracle 10 één retourtje naar de database bespaart.



  1. Is er een best practices/coherente manier om een ​​databaseveld bij te werken dat een hash-sleutel/waarde-archief bevat?

  2. Door de gebruiker gedefinieerd type wijzigen in SQL Server

  3. Geen MySQL-records keren terug wanneer een bepaalde limiet wordt overschreden?

  4. De geheimen van Domino's, of een Domino-spelgegevensmodel