Составные ключи в JPA - PullRequest
       34

Составные ключи в JPA

8 голосов
/ 18 сентября 2008

Я хочу создать объект, который имеет автоматически сгенерированный первичный ключ, но также и уникальный составной ключ, состоящий из двух других полей. Как мне сделать это в JPA?
Я хочу сделать это, потому что первичный ключ должен использоваться в качестве внешнего ключа в другой таблице, и создание его составного не будет хорошо.

В следующем фрагменте мне нужно, чтобы команда и модель были уникальными. ПК, конечно, является первичным ключом.

@Entity
@Table(name = "dm_action_plan")
public class ActionPlan {
    @Id
    private int pk;
    @Column(name = "command", nullable = false)
    private String command;
    @Column(name = "model", nullable = false)
    String model;
}

Ответы [ 2 ]

18 голосов
/ 18 сентября 2008

Вы можете использовать @UniqueConstraint примерно так:

@Entity
@Table(name = "dm_action_plan",
       uniqueConstraints={ @UniqueConstraint(columnNames= "command","model") } )
public class ActionPlan {
    @Id
    private int pk;

    @Column(name = "command", nullable = false)
    private String command;

    @Column(name = "model", nullable = false)
    String model;
}

Это позволит вашей реализации JPA сгенерировать DDL для уникального ограничения.

0 голосов
/ 18 сентября 2008

Используйте @GeneratedValue, чтобы указать, что ключ будет создан, и @UniqueConstraint, чтобы выразить уникальность

@Entity
@Table(name = "dm_action_plan"
       uniqueConstraint = @UniqueConstraint({"command", "model"})
)
public class ActionPlan {
    @Id
    @GeneratedValue
    private int pk;
    @Column(name = "command", nullable = false)
    private String command;
    @Column(name = "model", nullable = false)
    String model;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...