如何引入JPA批注的多列约束?
我试图在JPA映射的实体上引入一个多键约束:
public class InventoryItem { @Id private Long id; @Version private Long version; @ManyToOne @JoinColumn("productId") private Product product; @Column(nullable=false); private long serial; }
基本上(产品,序列)对应该是唯一的,但我只能find一个方法来说,串行应该是唯一的。 这显然不是一个好主意,因为不同的产品可能有相同的序列号。
有没有办法通过JPA生成这个约束,或者我被迫手动创build到DB?
您可以在实体类中使用@Table(uniqueConstraints = ...)
注释来声明唯一的约束,即
@Entity @Table(uniqueConstraints={ @UniqueConstraint(columnNames = {"productId", "serial"}) }) public class InventoryItem { ... }
请注意,这并不奇迹般地创build数据库中的唯一约束,您仍然需要一个DDL来创build它。 但似乎你正在使用某种自动化工具来创build基于JPA实体定义的数据库。
正如已经回答的那样,可以使用@Table
注释来添加多列索引。 但是, columnNames
需要是实际DB列的名称,而不是类属性。 所以,如果这个列如下所示:
@Column(name="product_id") Long productId;
那么@Table
注释应该如下所示
@Table(uniqueConstraints= @UniqueConstraint(columnNames = {"product_id", "serial"})