Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Skonfiguruj Hibernate tak, aby używał Oracle SYS_GUID() dla klucza podstawowego

Możesz być w stanie użyć generatora „przewodników”. Zobacz ten post z forum Hibernate. Wygląda na to, że dodali obsługę Oracle za pomocą SYS_GUID() jakiś czas temu, ale dokumentacja nadal mówi, że obsługują tylko SQL Server i MySQL.

Nie pracowałem jeszcze z adnotacjami JPA, ale oto przykład z użyciem konfiguracji XML:

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

EDYTUJ: Jeśli chodzi o twoje drugie pytanie, myślę, że pytasz, dlaczego Hibernate nie może zrobić czegoś takiego:

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

Powodem jest to, że Hibernate musi wiedzieć, jaki jest identyfikator obiektu. Rozważmy na przykład następujący scenariusz:

  1. Tworzysz nowy obiekt produktu i zapisujesz go. Oracle przypisuje identyfikator.
  2. Odłączasz produkt od sesji hibernacji.
  3. Później załączasz go ponownie i wprowadzasz pewne zmiany.
  4. Teraz chcesz zachować te zmiany.

Bez znajomości identyfikatora Hibernate nie może tego zrobić. Potrzebuje identyfikatora, aby wystawić oświadczenie UPDATE. Tak więc implementacja org.hibernate.id.GUIDGenerator musi wygenerować identyfikator wcześniej, a później ponownie użyć go w instrukcji INSERT.

Z tego samego powodu Hibernate nie może wykonywać żadnego przetwarzania wsadowego jeśli używasz identyfikatora generowanego przez bazę danych (w tym automatycznego przyrostu w bazach danych, które go obsługują). Korzystanie z jednego z generatorów hilo lub innego mechanizmu identyfikatorów generowanego przez Hibernate jest jedynym sposobem na uzyskanie dobrej wydajności podczas wstawiania wielu obiektów naraz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najpopularniejsze przydatne zapytania AWR dotyczące aktualizacji R12.2/R12.1

  2. Wywołanie funkcji przechowywanej (która zwraca tablicę typu zdefiniowanego przez użytkownika) w Oracle poprzez łącze do bazy danych

  3. Komunikat o błędzie programu sqldeveloper:Karta sieciowa nie może nawiązać błędu połączenia

  4. TEMPFILE Tryb gotowości fizycznej offline

  5. jak wybrać nawet rekordy z tabeli w oracle?