nHibernate posiada kilka generatorów kluczy głównych. Możemy je podzielić na dwie kategorie:
- takie, które wymagają odpytania bazy danych po wstawieniu rekordu do bazy o wygenerowany id
- takie, które wstawiają id wraz z wierszem
Pierwsza grupa zawiera następujące generatory:
- identity -zwraca id wygenerowane przez bazę
- select - używa zapytania SELECT aby pobrać id rekordu (potrzebny jest w takim wypadku klucz naturalny)
- sequence-identity - używany dla baz obsługujących sekwencje
- trigger-identity - zwraca id wygenerowane przez trigger
- native - w zależności od bazy danych (np. dla MS SQL identity, dla Oracle - sequence-identity)
- hilo - użyty jest algorytm Hi/Lo - rezerwowany jest zakres identyfikatorów numerycznych. Po skończeniu danego zakresu rezerwowany jest kolejny. Jest to bezpieczne rozwiązanie, gdyż użyta jest w bazie dodatkowa tabela przechowująca rezerwowane zakresy
- guid - wykorzystuje GUID
- guid.comb - łączy 10 bajtowy GUID wraz z 6 bajtową datą. Zmniejsza to poziom fragmentacji indeksu
- guid.native - pobiera GUID z bazy (wymaga to odwołania do bazy dnaych)
- uuid.hex - tworzy GUID numeryczny
- uuid.string - zapisuje GUID w postaci binarnej - w takiej postaci jest nieczytelny dla człowieka
- counter - licznik inicjalizowany z zegara systemowego; nie można go stosować w rozwiązaniach gdzie baza jest współdzielona
- increment - rozwiązanie podobne do poprzedniego - wartość początkowa licznika pobierana jest na starcie jako MAX(Id) i inkrementowana w czasie działania programu. Nie nadaje się w rozwiązaniach gdzie jest współdzielona baza danych.
- sequence - korzysta z sekwencji dostępnych w takich bazach jak Oracle i PostgreSql
- seqhilo - łączy algorytm Hi/Lo z sekwencjami w celu poprawienia wydajności
- foreign - używa klucza z innej encji - najczęściej wykorzystywany w przypadku relacji one-to-one
Jeżeli budujemy prostą aplikację, a z bazy będzie korzystała tylko jedna aplikacja możemy spokojnie jako klucza głównego użyć typu całkowitoliczbowego (integer).
Brak komentarzy:
Prześlij komentarz