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"})