Как я понимаю, всякий раз, когда я использую @Id и @GeneratedValue в поле Long внутри сущности JPA / Hibernate, я на самом деле использую суррогатный ключ, и я думаю, что это очень хороший способ определить первичный ключ, учитываямой не очень хороший опыт использования составных первичных ключей, где:
- существует более 1 комбинации столбцов бизнес-значений, которые становятся уникальными PK
- составными значениями pkдублировать данные таблицы
- не может изменить бизнес-ценность внутри этого составного ПК
Я знаю, что hibernate может поддерживать оба типа ПК, но я уже удивляюсь, что мои предыдущие чаты с опытнымиколлеги, которые сказали, что с сложным PK легче иметь дело при выполнении сложных запросов SQL и процессов хранимых процедур.
Они продолжали говорить, что при использовании суррогатных ключей все усложняется при объединении, и есть несколько условий, когда невозможно использовать некоторые вещи при использовании суррогатных ключей.Хотя я извиняюсь, я не могу объяснить детали здесь, так как я не был достаточно ясен, когда они это объясняют.Возможно, я добавлю больше деталей в следующий раз.
В настоящее время я пытаюсь создать проект и хочу попробовать суррогатные ключи, поскольку он не дублируется в таблицах, и мы можем изменить значения бизнес-столбцов.И когда мне нужна некоторая уникальность комбинации бизнес-ценности, я могу использовать что-то вроде:
@Table(name="MY_TABLE", uniqueConstraints={
@UniqueConstraint(columnNames={"FIRST_NAME", "LAST_NAME"}) // name + lastName combination must be unique
Но я все еще сомневаюсь из-за предыдущего обсуждения составного ключа.
Не могли бы вы поделиться?ваш опыт в этом вопросе?Спасибо!