SQL JPA - несколько столбцов в качестве первичного ключа
Если я хочу суровую колонку, чтобы составить удостоверение личности.
Пример SQL:
CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])
Как я могу сделать это с классом Jpa Entity? через столбец определения?
просто установив поле id как:
value = Column1 + Column2 + Column3 // aint working.
4 ответа
Вам нужен класс для составного ключа:
public class CompositeKey implements Serializable {
private int column1;
private int column2;
private int column3;
}
а затем в вашем классе сущности использовать @IdClass
аннотация:
@Entity
@IdClass(CompositeKey.class)
public class EntityExample {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
...
...
}
Я думаю, что это должно работать. Надеюсь, это поможет, ура!
Да, и есть другое решение, упомянутое @jklee, оба работают, это вопрос предпочтений.
Использование @Embeddable
а также @EmbeddedId
,
Пример:
@Entity
public class Project {
@EmbeddedId ProjectId id;
:
}
@Embeddable
Class ProjectId {
int departmentId;
long projectId;
}
Более подробная информация здесь http://www.objectdb.com/java/jpa/entity/id
Если все поля в классе являются частью первичного ключа, то решение будет довольно простым (расширение решения предоставляется @raul-cuth):
@Entity
@IdClass(EntityExample.class)
public class EntityExample implements Serializable {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
}
- С помощью
@IdClass
аннотация на@Entity
класс с последующим@Id
аннотация на отдельные поля, которые являются частью составного первичного ключа. - В качестве альтернативы можно использовать
@Embeddable
класс, который может состоять из отдельных полей составного первичного ключа, а затем ссылка на этот класс может использоваться в качестве атрибута с@Embedded
аннотация в@Entity
учебный класс. Надеюсь это поможет.
Имейте в виду, что генератор hibernate Entity-Class-to-SQL-DDL-Script будет отсортировать все поля и независимо от порядка, в котором он появляется в определениях, создаст определение таблицы и определения индекса / ограничения в этом отсортированном порядок полей.
Хотя порядок появления полей в определении таблицы может не иметь большого значения, порядок полей в составном индексе определенно имеет значение. Таким образом, ваши ключевые поля должны быть названы так, чтобы при сортировке по именам они располагались в том порядке, который вы хотите для индекса).