我试图在JPA映射实体上引入一个多键约束:
public class InventoryItem {
@Id
private Long id;
@Version
private Long version;
@ManyToOne
@JoinColumn("productId")
private Product product;
@Column(nullable=false);
private long serial;
}
Run Code Online (Sandbox Code Playgroud)
基本上(产品,串行)对应该是唯一的,但我只找到了一种说串行应该是唯一的方法.这显然不是一个好主意,因为不同的产品可能具有相同的序列号.
有没有办法通过JPA生成这个约束,还是我被迫手动创建它到DB?
psp*_*psp 159
您可以使用@Table(uniqueConstraints = ...)
实体类中的注释声明唯一约束,即
@Entity
@Table(uniqueConstraints={
@UniqueConstraint(columnNames = {"productId", "serial"})
})
public class InventoryItem {
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,这并不会在数据库中神奇地创建唯一约束,您仍然需要一个DDL来创建它.但似乎您正在使用某种自动化工具来创建基于JPA实体定义的数据库.
SJh*_*Jha 62
如前所述,可以使用@Table
注释添加多列索引.但是,columnNames
需要是实际DB列的名称,而不是class属性.因此,如果列如下所示:
@Column(name="product_id")
Long productId;
Run Code Online (Sandbox Code Playgroud)
然后@Table
注释应如下所示
@Table(uniqueConstraints=
@UniqueConstraint(columnNames = {"product_id", "serial"})
Run Code Online (Sandbox Code Playgroud)