Составные ключи в JPA
-
01-07-2019 - |
Вопрос
Я хочу создать объект, который имеет автоматически сгенерированный первичный ключ, но также и уникальный составной ключ, состоящий из двух других полей.Как мне сделать это в JPA?
Я хочу сделать это, потому что первичный ключ должен использоваться как внешний ключ в другой таблице, и делать его составным было бы нехорошо.
В следующем фрагменте мне нужно, чтобы команда и модель были уникальными.pk - это, конечно, первичный ключ.
@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;
}
Решение
Вы можете использовать @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 для уникального ограничения.
Другие советы
Используйте @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;
}
Не связан с StackOverflow