首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过JPA注解引入多列约束?

如何通过JPA注解引入多列约束?
EN

Stack Overflow用户
提问于 2010-05-05 18:46:53
回答 2查看 79K关注 0票数 100

我尝试在JPA映射的实体上引入一个多键约束:

代码语言:javascript
复制
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中手动创建它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-05 18:56:41

您可以在实体类中使用@Table(uniqueConstraints = ...)注释声明唯一约束,即

代码语言:javascript
复制
@Entity
@Table(uniqueConstraints={
    @UniqueConstraint(columnNames = {"productId", "serial"})
}) 
public class InventoryItem {
    ...
}

请注意,这不会在数据库中神奇地创建唯一约束,您仍然需要一个DDL才能创建它。但是您似乎正在使用某种自动化工具来创建基于JPA实体定义的数据库。

票数 215
EN

Stack Overflow用户

发布于 2014-08-15 03:03:13

如前所述,可以使用@Table注释添加多列索引。但是,columnNames必须是实际数据库列的名称,而不是类属性。因此,如果该列如下所示:

代码语言:javascript
复制
@Column(name="product_id")
Long productId;

然后,@Table注释应如下所示

代码语言:javascript
复制
@Table(uniqueConstraints=
       @UniqueConstraint(columnNames = {"product_id", "serial"})) 
票数 77
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2772470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档