如何使用JPA注释引入多列约束?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

试图在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 {
    ...
}

用户回答回答于

然而,columnNames需要是实际DB列的名称,而不是类属性。因此,如果该列如下所示:

@Column(name="product_id")
Long productId;

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

@Table(uniqueConstraints=
       @UniqueConstraint(columnNames = {"product_id", "serial"}) 

扫码关注云+社区