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

Nakonfigurujte režim spánku tak, aby jako primární klíč používal SYS_GUID() společnosti Oracle

Možná budete moci použít generátor „guid“. Viz tento příspěvek z fóra Hibernate. Vypadá to, že přidali podporu pro Oracle pomocí SYS_GUID() před časem, ale dokumentace stále říká, že podporují pouze SQL Server a MySQL.

S anotacemi JPA jsem ještě nepracoval, ale zde je příklad použití konfigurace XML:

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

UPRAVIT: Pokud jde o vaši druhou otázku, myslím, že se ptáte, proč Hibernate nemůže udělat něco takového:

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

Důvodem je, že Hibernate musí vědět, jaké je ID objektu. Zvažte například následující scénář:

  1. Vytvoříte nový objekt produktu a uložíte jej. Oracle přiřadí ID.
  2. Odpojíte produkt od relace Hibernate.
  3. Později jej znovu připojíte a provedete nějaké změny.
  4. Nyní chcete tyto změny zachovat.

Bez znalosti ID to Hibernate nemůže udělat. K vydání příkazu UPDATE potřebuje ID. Tedy implementace org.hibernate.id.GUIDGenerator musí ID předem vygenerovat a později jej znovu použít v příkazu INSERT.

To je stejný důvod, proč Hibernate nemůže provádět žádné dávkování pokud používáte ID vygenerované databází (včetně automatického zvýšení u databází, které jej podporují). Jediným způsobem, jak dosáhnout dobrého výkonu při vkládání velkého množství objektů najednou, je použití jednoho z generátorů hilo nebo jiného mechanismu ID generovaného Hibernatem.



  1. Optimalizace Microsoft Access pomocí SQL Server IndyPass – 5/21/19

  2. MySQL na Azure Performance Benchmark – ScaleGrid vs. Azure Database

  3. 6 zábavných faktů o společnosti Microsoft, které pravděpodobně neznáte!

  4. Proč je zálohování dat pro vaši organizaci důležité