[java] JPA 주석으로 다중 열 제약 조건을 도입하는 방법은 무엇입니까?

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 {
    ...
}

이것은 마술처럼 데이터베이스에 고유 한 제약 조건을 생성하는 것이 아니라 생성 할 DDL이 여전히 필요합니다. 그러나 JPA 엔티티 정의를 기반으로 데이터베이스를 생성하기 위해 일종의 자동화 도구를 사용하는 것 같습니다.


답변

이미 답변했듯이 @Table주석을 사용하여 다중 열 색인을 추가 할 수 있습니다 . 그러나 columnNames클래스 속성이 아닌 실제 DB 열의 이름이어야합니다. 따라서 열이 다음과 같은 경우 :

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

그러면 @Table주석은 다음과 같아야합니다.

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


답변