Я пытаюсь представить мультиключевое ограничение на 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, или я вынужден вручную создать его к DB?
Вы можете объявлять уникальные ограничения с помощью аннотации @Table (uniqueConstraints = ...)
в вашем классе сущности, т.е.
@Entity
@Table(uniqueConstraints={
@UniqueConstraint(columnNames = {"productId", "serial"})
})
public class InventoryItem {
...
}
Обратите внимание, что это не создает волшебным образом уникальное ограничение в базе данных, вам все равно нужен DDL для это должно быть создано. Но похоже, что вы используете какой-то автоматизированный инструмент для создания базы данных на основе определений сущностей JPA.