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로 설정한 모습입니다.