1. ホーム
  2. java

[解決済み] JPAアノテーションで複数列の制約を導入するには?

2023-01-04 04:24:50

質問

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経由で生成する方法はありますか、それともDBに手動で作成することを余儀なくされますか。

どのように解決するのですか?

一意制約を宣言するには @Table(uniqueConstraints = ...) アノテーションを使用して一意制約を宣言することができます。

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

これは魔法のようにデータベースに一意制約を作成するわけではないことに注意してください。しかし、JPAエンティティ定義に基づいてデータベースを作成するために、ある種の自動化ツールを使用しているように思われます。