Spring/Spring Data
[JPA] 다중 Unique 제약조건 생성하기
개발자가 말대꾸?
2022. 11. 25. 08:55
Unique 제약 조건
Unique 제약조건이 있는 컬럼은 모든 값이 고유하도록 만들 수 있습니다.
예시
create table NFT
(
NFT_ID bigint primary key auto increment,
NFT_NAME varchar(25) unique,
)
comment 'NFT 정보';
NFT 테이블에서 NFT_NAME은 중복되면 안됨으로 Unique 제약조건을 추가할 수 있습니다.
다중 Unique 제약 조건
다중 Unique는 여러 컬럼을 묶어서 Unique로 만드는 제약조건입니다.
예시
create table NFT
(
NFT_ID bigint primary key auto increment,
NFT_NAME varchar(14) not null,
NFT_SUB_NAME varchar(20) not null
constraint multiUniqueConstraint
unique (NFT_NAME, NFT_SUB_NAME)
)
comment '지갑계정정보';
만약 NFT에게 MainName과 SubName 모두 똑같다면 Unique로 제약조건을 설정하고 싶다면 위와 같이 추가할 수 있습니다.
JPA Unique 제약조건
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(schemas = "nft_wallet")
public class NFT {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "NFT_ID")
private Integer id;
@Column(name = "NFT_NAME", unique = true)
private String nftName;
}
NFT 이름만 Unique 제약조건을 설정하고 싶다면 해당 필드에 @Column 어노테이션을 설정하고
unique 속성을 true로 주면됩니다. (기본값은 false)
JPA 다중 Unique 제약조건
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(
name = "NFT",
uniqueConstraints = {
@UniqueConstraint(name = "multiUniqueConstraint", columnNames = {
"NFT_NAME", "NFT_SUB_NAME"
})
},
schemas = "nft_wallet"
)
public class NFT {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "NFT_ID")
private Integer id;
@Column(name = "NFT_NAME")
private String nftName;
@Column(name = "NFT_SUB_NAME")
private String nftSubName;
}
다중 유니크 제약조건은 Table 어노테이션의 uniqueConstraints 속성에 설정할 수 있습니다.
NFT Entity의 경우 NFT_NAME과 NFT_SUB_NAME을 묶어 유니크 제약조건으로 두고
제약조건 이름을 multiUniqueConstraint로 설정한 모습입니다.