Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hibernate Jpa - pengecualian pelanggaran batasan pada Kunci Utama (Urutan)

Dialek Oracle 10

Untuk Oracle10gDialect gunakan konfigurasi ini

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

Hibernasi membuat tabel dan urutan:

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 

Saat menyimpannya, pertama-tama dapatkan ID urutan baru dan kemudian meneruskannya di INSERT pernyataan

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

Dialek Oracle 12

Jika Anda menggunakan Oracle 12 yang secara native mendukung IDENTITY column lebih disukai untuk meningkatkan ke Oracle12cDialect (perhatikan bahwa ini membutuhkan Hibernate 5.3)

Tetapkan strategy ke GenerationType.IDENTITY

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

Tabel berikut dibuat - bagian penting generated as identity yang memberikan nilai unik. Perhatikan bahwa tidak ada sequence yang eksplisit harus dibuat, itu dikelola secara internal .

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

Saat menyimpan tidak ada ID yang diteruskan di INSERT , ditugaskan oleh Oracle dan dikembalikan ke sesi

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

Perhatikan bahwa berbeda dengan Oracle 10 Anda menyimpan satu perjalanan pulang pergi ke database.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa NVL selalu mengevaluasi parameter ke-2

  2. Kueri berfungsi di Oracle 11g tetapi gagal di Oracle 8i

  3. Apakah pernyataan DDL selalu memberi Anda komit implisit, atau bisakah Anda mendapatkan rollback implisit?

  4. prosedur tersimpan untuk memilih semua baris dari tabel di Oracle

  5. Koneksi Laravel dan Oracle