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, оба работают, это вопрос предпочтения.

Ответ 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

  1. Использование @IdClass аннотации на @Entity классе с последующим @Id аннотацией на отдельных областях, которые являются частью составного первичного ключа.
  2. В качестве альтернативы можно использовать класс @Embeddable который может состоять из отдельных полей составного первичного ключа, а затем ссылка этого класса может использоваться как атрибут с @Embedded аннотацией в классе @Entity. Надеюсь это поможет.

Ответ 5

Имейте в виду, что генератор hibernate Entity-Class-to-SQL-DDL-Script будет сортировать все поля и независимо от порядка, в котором он появляется в определениях, создаст определение таблицы и определения индекса/ограничения в этом отсортированном порядок полей.

Хотя порядок появления полей в определении таблицы может не иметь большого значения, порядок полей в составном индексе определенно имеет значение. Таким образом, ваши ключевые поля должны быть названы так, чтобы при сортировке по их именам они были в том порядке, в котором вы хотите индекс).