sql >> Databáze >  >> RDS >> Oracle

Hibernate Jpa – výjimka porušení omezení na primárním klíči (sekvence)

Nářečí Oracle 10

Pro Oracle10gDialect použijte tuto konfiguraci

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

Hibernate vytvoří tabulku a sekvenci:

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 

Při ukládání nejprve získá ID nové sekvence a poté jej předá do INSERT prohlášení

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

Nářečí Oracle 12

Pokud používáte Oracle 12 která nativně podporuje IDENTITY column upřednostňuje se upgrade na Oracle12cDialect (Všimněte si, že to vyžaduje Hibernate 5.3)

Nastavte strategy na GenerationType.IDENTITY

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

Je vytvořena následující tabulka - důležitá část je generated as identity který poskytuje jedinečné velues. Všimněte si, že žádná explicitní sequence je nutné vytvořit, je spravován interně .

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

Při ukládání není v INSERT předáno žádné ID , je přiřazena společností Oracle a vrácena do relace

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

Všimněte si, že na rozdíl od Oracle 10 ušetříte jednu zpáteční cestu do databáze.



  1. Klauzule Go a IN v Postgresu

  2. Převést výstup dotazu Oracle na json (Oracle / NodeJS)

  3. Použití parametrů pro mysql_query

  4. Operátor pivotu Oracle