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

Konfigurasikan Hibernate untuk menggunakan Oracle's SYS_GUID() untuk Primary Key

Anda mungkin dapat menggunakan generator "panduan". Lihat posting ini dari forum Hibernate. Sepertinya mereka menambahkan dukungan untuk Oracle menggunakan SYS_GUID() beberapa waktu lalu, tetapi dokumentasi masih mengatakan bahwa mereka hanya mendukung SQL Server dan MySQL.

Saya belum bekerja dengan anotasi JPA, tetapi berikut adalah contoh menggunakan konfigurasi XML:

<id name="PRODUCT_ID">
  <generator class="guid" />
</id>

EDIT: Sehubungan dengan pertanyaan kedua Anda, saya pikir Anda bertanya mengapa Hibernate tidak dapat melakukan sesuatu seperti ini:

INSERT INTO PRODUCT (PRODUCT_ID, /* etc */)
SELECT SYSGUID(), /* etc */

Pasalnya, Hibernate harus mengetahui apa ID objek tersebut. Misalnya, pertimbangkan skenario berikut:

  1. Anda membuat objek Produk baru dan menyimpannya. Oracle memberikan ID.
  2. Anda melepaskan Produk dari sesi Hibernate.
  3. Anda kemudian memasangnya kembali dan membuat beberapa perubahan.
  4. Sekarang Anda ingin mempertahankan perubahan tersebut.

Tanpa mengetahui ID, Hibernate tidak dapat melakukan ini. Perlu ID untuk mengeluarkan pernyataan UPDATE. Jadi implementasi org.hibernate.id.GUIDGenerator harus membuat ID sebelumnya, dan kemudian menggunakannya kembali di pernyataan INSERT.

Ini adalah alasan yang sama mengapa Hibernate tidak dapat melakukan pengumpulan apa pun jika Anda menggunakan ID yang dihasilkan basis data (termasuk peningkatan otomatis pada basis data yang mendukungnya). Menggunakan salah satu generator hilo, atau mekanisme ID yang dihasilkan Hibernate lainnya, adalah satu-satunya cara untuk mendapatkan kinerja yang baik saat memasukkan banyak objek sekaligus.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menangani pengecualian to_date dalam pernyataan SELECT untuk mengabaikan baris-baris itu?

  2. Cara Memformat Angka di Oracle

  3. Apa efek menempatkan komit setelah DML dalam prosedur?

  4. Menghapus baris dari tabel induk dan anak

  5. Bagaimana cara menghapus duplikat dari daftar yang dipisahkan koma dengan regex di Oracle tetapi saya tidak ingin nilai duplikat?