簡體   English   中英

如何使用 JPA 注釋引入多列約束?

[英]How to introduce multi-column constraint with JPA annotations?

我正在嘗試在 JPA 映射實體上引入多鍵約束:

public class InventoryItem {
    @Id
    private Long id;

    @Version 
    private Long version;

    @ManyToOne
    @JoinColumn("productId")
    private Product product;

    @Column(nullable=false);
    private long serial;
}

基本上 (product, serial) 對應該是唯一的,但我只找到了一種方法來說明序列號應該是唯一的。 這顯然不是一個好主意,因為不同的產品可能具有相同的序列號。

有沒有辦法通過 JPA 生成這個約束,還是我被迫手動將它創建到數據庫?

您可以在實體類中使用@Table(uniqueConstraints = ...)注釋聲明唯一約束,即

@Entity
@Table(uniqueConstraints={
    @UniqueConstraint(columnNames = {"productId", "serial"})
}) 
public class InventoryItem {
    ...
}

請注意,這不會神奇地在數據庫中創建唯一約束,您仍然需要一個 DDL 來創建它。 但似乎您正在使用某種自動化工具來創建基於 JPA 實體定義的數據庫。

正如已經回答的那樣,可以使用@Table注釋添加多列索引。 但是, columnNames需要是實際數據庫列的名稱,而不是類屬性。 因此,如果該列如下所示:

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

那么@Table注解應該像下面這樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM