Post

JPA @Size, @Length, @Column(length=value) 차이점

1. 유래

이러한 주석은 모두 필드 크기를 전달하기 위한 것이다.

@Size@Length는 유사하다. 두 주석 중 하나를 사용하여 필드 크기의 유효성을 검사할 수 있다. 전자는 Java 표준 주석인 반면 후자는 Hibernate에만 해당 된다.

@Column은 DDL 문을 제어하는데 사용하는 JPA 주석 이다.

2. @Size

검증을 위해 @Size, 빈 검증 주석을 사용한다. @Size로 주석 처리된 속성 middleName을 사용하여 속성 min과 max 사이의 값을 검증한다.

1
2
3
4
5
6
7
8
9
10
public class User {

    // ...

    @Size(min = 3, max = 15)
    private String middleName;

    // ...

}

가장 중요한 점은 @Size가 빈을 JPA와 Hibernate와 같은 벤더에 독립적으로 만든다는 것이다. 결과적으로 @Length 보다 더 이식성이 뛰어나다.

3. @Length

@Length@Size의 Hibernate 전용 버전이다. @Length를 사용하여 lastName의 범위를 적용한다.

1
2
3
4
5
6
7
8
9
10
11
@Entity
public class User {

    // ...
      
    @Length(min = 3, max = 15)
    private String lastName;

    // ...

}

4. @Column(length=value)

@Column은 이전 두 주석과 상당히 다르다.

@Column을 사용하여 물리적 데이터베이스 열의 구체적인 특성을 나타낸다. @Column 주석의 length 속성을 사용하여 문자열 값 열 길이를 지정한다.

1
2
3
4
5
6
7
8
9
@Entity
public class User {

    @Column(length = 3)
    private String firstName;

    // ...

}

결과 열은 VARCHAR(3)으로 생성되고 더 긴 문자열을 삽입하려고 하면 SQL 오류가 발생한다.

@Column은 유효성 검사를 제공하지 않으므로 테이블 열 속성을 지정하는 데만 사용한다.

물론 @Column@Size와 함께 사용하여 Bean 유효성 검사와 함께 데이터베이스 열 속성을 지정할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
@Entity
public class User {

    // ... 
    
    @Column(length = 5)
    @Size(min = 3, max = 5)
    private String city;

    // ...

}

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.