我尝试在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中手动创建它?
发布于 2010-05-05 18:56:41
您可以在实体类中使用@Table(uniqueConstraints = ...)
注释声明唯一约束,即
@Entity
@Table(uniqueConstraints={
@UniqueConstraint(columnNames = {"productId", "serial"})
})
public class InventoryItem {
...
}
请注意,这不会在数据库中神奇地创建唯一约束,您仍然需要一个DDL才能创建它。但是您似乎正在使用某种自动化工具来创建基于JPA实体定义的数据库。
发布于 2014-08-15 03:03:13
如前所述,可以使用@Table
注释添加多列索引。但是,columnNames
必须是实际数据库列的名称,而不是类属性。因此,如果该列如下所示:
@Column(name="product_id")
Long productId;
然后,@Table
注释应如下所示
@Table(uniqueConstraints=
@UniqueConstraint(columnNames = {"product_id", "serial"}))
https://stackoverflow.com/questions/2772470
复制相似问题