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;
}
  1. С помощью @IdClass аннотация на @Entity класс с последующим @Id аннотация на отдельные поля, которые являются частью составного первичного ключа.
  2. В качестве альтернативы можно использовать @Embeddable класс, который может состоять из отдельных полей составного первичного ключа, а затем ссылка на этот класс может использоваться в качестве атрибута с @Embedded аннотация в @Entity учебный класс. Надеюсь это поможет.

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

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

Другие вопросы по тегам