Jak rozumiem, ilekroć używam @Id i @GeneratedValue na długim polu w jednostce JPA/Hibernate, używam w rzeczywistości zastępczego klucza i myślę, że jest to bardzo dobry sposób, aby zdefiniować klucz podstawowy biorąc pod uwagę moje niezbyt dobre doświadczenia w stosowaniu złożonych kluczy podstawowych, gdzie:Hibernate: Opinie w Composite PK vs Surrogate PK
- istnieje ponad 1 Biznes-value-kolumny kombinację, która stała się unikalnym PK
- z Złożone wartości pk powielone na całej powierzchni detali
- nie można zmienić wartości biznesowej wewnątrz tego kompozytu PK
Wiem, że hibernacja może obsługiwać oba typy PK, ale zastanawiam się przez moje poprzednie rozmowy z doświadczonymi kolegami, gdzie powiedzieli, że złożony PK jest łatwiejszy w obsłudze przy wykonywaniu złożonych zapytań SQL i procesów przechowywanych procedur.
Mówili dalej, że użycie zastępczych klawiszy komplikuje sytuację podczas łączenia i jest kilka sytuacji, w których niemożliwe jest wykonanie pewnych czynności przy użyciu zastępczych kluczy. Chociaż im przykro, nie mogę wyjaśnić szczegółów tutaj, ponieważ nie byłem wystarczająco jasne, kiedy to wyjaśnić. Może następnym razem przedstawię więcej szczegółów.
Próbuję obecnie wykonać projekt i spróbować wypróbować klucze zastępcze, ponieważ nie jest on duplikowany w tabelach i możemy zmienić wartości kolumny biznesowej. A gdy potrzeba pewnego wartości biznesowej skojarzonej wyjątkowości, mogę użyć czegoś takiego:
@Table(name="MY_TABLE", uniqueConstraints={
@UniqueConstraint(columnNames={"FIRST_NAME", "LAST_NAME"}) // name + lastName combination must be unique
Ale jestem nadal wątpliwości ze względu na poprzedniej dyskusji na temat klucza kompozytowego.
Czy możesz podzielić się swoimi doświadczeniami w tej sprawie? Dziękuję Ci !
dziękuję bardzo! – bertie