Создание составного ключа для JPA / Hibernate против искусственного Long ID - PullRequest
0 голосов
/ 19 июня 2019

Что может быть лучше для сопоставления сущности в jpa, которая имеет только 2 столбца, которые являются частью первичного ключа?

  1. Самоссылочный объект Java-класс в качестве первичного ключа
  2. Создать POJO для первичного ключа
  3. Введите "Длинный идентификатор" как искусственный идентификатор, чтобы избежать сопоставления составного ключа

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

То, что вы просите, звучит как отношения многие ко многим. Если нет другого выбора, кроме как создать для этого сущность, это то, как вы это делаете.

Сначала , создайте встраиваемый составной ключ

@Embeddable
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BaseKey {
    private String a;
    private String b;
}

Второй , создайте свою сущность

@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AnyEntity {

    @EmbeddedId
    private BaseKey key;

}
0 голосов
/ 19 июня 2019

Я выберу вариант 3, чтобы иметь surrogate key как длинный идентификатор. Потому что вы хотели бы избежать обновления нескольких строк в случае изменения части вашего составного ключа. Также обратите внимание, что даже ссылки на индексы должны быть обновлены.

Например,

- в приведенном ниже примере допустим, что идентификатор компании / сотрудник не изменился, тогда вам придется обновить несколько строк в случае сотрудника, а затем таблицы телефона.

Employee                    Phone   
---------                   --------
Company ID (PK)             Phone no
Employee No (PK)            Company ID (FK)
Name                        Employee No (FK)

Скорее, если вы добавите суррогатный ключ в Employee, то только одно обновление в таблице Employee.

Employee                    Phone   
---------                   --------
ID (PK)                     Phone no
Company ID (UK)             Employee ID (FK)
Employee No (UK)            
Name                        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...