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