앞서 말했듯 이는 단일 필드 일 때 @Column(unique = true)
의 지름길 UniqueConstraint
입니다.
당신이 준 예에서, 둘 사이에는 큰 차이가 있습니다.
@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ProductSerialMask mask;
@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Group group;
이 코드는 mask
및 둘 다 group
고유해야하지만 별도로 있어야 함을 의미합니다 . 예를 들어, 당신이 가진 기록을 가지고있는 경우 것이 그 수단 mask.id = 1 과 다른 레코드 삽입하고 시도 mask.id = 1을 그 열이 고유 한 값을 가져야하기 때문에, 당신은 오류가 발생합니다. 그룹에도 동일하게 적용됩니다.
반면에
@Table(
name = "product_serial_group_mask",
uniqueConstraints = {@UniqueConstraint(columnNames = {"mask", "group"})}
)
결합 된 마스크 + 그룹의 값이 고유해야 함을 의미합니다. 당신은 할 수있는 것을 의미한다, 예를 들어,와 기록 mask.id = 1 및 group.id = 1 , 당신과 다른 레코드를 삽입하려고하면 = 1 mask.id 및 group.id = 2 , 그것은 삽입됩니다 첫 번째 경우에는 그렇지 않습니다.
마스크와 그룹을 개별적으로 그리고 클래스 수준에서 고유하게하려면 다음과 같이 코드를 작성해야합니다.
@Table(
name = "product_serial_group_mask",
uniqueConstraints = {
@UniqueConstraint(columnNames = "mask"),
@UniqueConstraint(columnNames = "group")
}
)
이것은 첫 번째 코드 블록과 동일한 효과가 있습니다.
unique=true
스키마 자동 업데이트 프로그램에 의해 인덱스가 추가되지 않았습니다.@UniqueConstraint
나타나게했다. 버그 일 수 있습니다.