Как назначить несколько полей в качестве первичного ключа сущности (используя JPA) [дубликат]
этот вопрос уже есть ответ здесь:
можно назначить первичный ключ для его класса, используя аннотацию @Id в JPA. Мой вопрос в том, что, если человек не хочет иметь автоматически сгенерированный ключ в своих таблицах и использовать поля (возможно, более одного) в качестве первичного ключа.
предположим, у нас есть таблица person с SSN, национальностью и именем. SSN определяется как число, по которому идентифицируется лицо в его стране. Таким образом, у нас могут быть два человека с одинаковым числом в двух разных странах. Первичным ключом для этой таблицы может быть SSN + NATIONALITY. Есть ли способ сопоставить эти два поля с помощью JPA и сопоставить его с объектом? или единственный способ создать автоматически сгенерированный идентификатор и использовать аннотацию @Id
CREATE TABLE PERSON (
SSN INT,
NATIONALITY VARCHAR,
NAME VARCHAR
)
1 ответов
Да, это возможно. Составной первичный ключ состоит из нескольких полей первичного ключа. Каждое поле первичного ключа должно быть одним из поддерживаемых типом JPA. Для вашего стола у вас есть:
@Entity @IdClass(PersonId.class)
public class Person {
@Id int ssn;
@Id String nationality;
....
}
для сущности с несколькими ключами JPA требует определения специального класса ID. Этот класс должен быть присоединен к классу сущности с помощью аннотации @IdClass.
class PersonId {
int ssn;
String nationality;
}
класс ID отражает поля первичного ключа, а его объекты могут представлять значения первичного ключа