Вопрос

Я хочу создать объект, который имеет автоматически сгенерированный первичный ключ, но также и уникальный составной ключ, состоящий из двух других полей.Как мне сделать это в 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top