Я пытаюсь ввести ограничение с несколькими ключами для объекта, отображаемого в JPA:
public class InventoryItem {
@Id
private Long id;
@Version
private Long version;
@ManyToOne
@JoinColumn("productId")
private Product product;
@Column(nullable=false);
private long serial;
}
По сути, пара (продукт, серийный номер) должна быть уникальной, но я нашел только способ сказать, что серийный номер должен быть уникальным. Очевидно, что это не очень хорошая идея, поскольку разные продукты могут иметь одинаковые серийные номера.
Есть ли способ создать это ограничение через JPA, или я вынужден вручную создать его в БД?
Как уже было сказано, многостолбцовый индекс можно добавить с помощью
@Table
аннотации. Однако этоcolumnNames
должно быть имя фактических столбцов БД, а не атрибут класса. Итак, если столбец выглядит следующим образом:@Column(name="product_id") Long productId;
Тогда
@Table
аннотация должна быть такой:@Table(uniqueConstraints= @UniqueConstraint(columnNames = {"product_id", "serial"})
источник