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:
- Anda membuat objek Produk baru dan menyimpannya. Oracle memberikan ID.
- Anda melepaskan Produk dari sesi Hibernate.
- Anda kemudian memasangnya kembali dan membuat beberapa perubahan.
- 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.