@Size, @Length, @Column 차이점

@Size, @Length, @Column 차이점

728x90

@Size, @Length, @Column 차이점

팀 프로젝트를 하면서 내가 JPA쪽 부분을 담당하게 되었다. Entity를 작성하던중 필드의 속성을 지정해줘야 했는데 필드의 사이즈를 무엇으로 주어야하나 고민을 했다. 구글링을 해보니 @Size, @Length, @Column 3개중 하나로 필드의 사이즈를 지정해주었느데 도대체 무슨 차이인지 궁금했다.

이곳저곳을 찾아보던중 잘 설명해 놓은곳이 있어서, 이 사이트의 설명을 번역해서 올린다.

https://www.baeldung.com/jpa-size-length-column-differences

1. Overview

JSR-330의 @Size, Hibernate의 @Length , 그리고 JPA의 @Column에 대해서 살펴보겠습니다.

언뜻 보기엔 비슷해 보이지만 서로 다른 기능을 하고있습니다. 알아봅시다.

2. Origins

간단히 말해서 이 annotation은 필드의 크기를 전달하기 위한 것입니다.

@Size 와 @Length 는 비슷합니다. 둘다 필드의 크기에 검증하기위해 사용합니다. @Size 는 Java-standard annotation이고 @Length 는 specific to Hibernate입니다.

하지만 @Column 은 DDL을 컨트롤 하기위해 사용되는 JPA annotation입니다.

3. @Size

검증을 위해서, @Size 검증 어노테이션을 사용합니다. @Size가 붙은 middleName속성을 사용하여 min, max 특성 사이의 값을 확인합니다.

public class User { // ... @Size(min = 3, max = 15) private String middleName; // ... }

가장 중요한 점은, @Size가 JPA와 Hinernate로부터 독립적인 bean을 만들어줍니다. 결과적으로 @Size는 @Length보다 더 가볍습니다.

4. @Length

그리고 말했듯이, @Length는 Hiberbate의 @Size어노테이션입니다. LastName 속성에 @Length를 사용해서 범위를 지정해 봅시다.

@Entity public class User { // ... @Length(min = 3, max = 15) private String lastName; // ... }

5. @Column(length=value)

하지만 @Column 은 많이 다릅니다.

@Column은 실제 데이터베이스 열의 특정 특성을 나타내기 위해 사용됩니다. @Column의 length속성을 사용해서 열의 문자열의 길이를 특정해봅시다.

@Entity public class User { @Column(length = 3) private String firstName; // ... }

열은 VARCHAR(3) 타입으로 생성되고 3보다 긴 문자열을 넣으려고 하면 SQL error가 나타납니다.

@Column은 유효성 검사를 제공하지 않으므로 테이블 열 속성 지정에만 사용됩니다.

물론, @Column 과 @Size를 같이 사용해 bean 검증을 통해 테이터베이스 열 특성을 지정할 수 있습니다.

@Entity public class User { // ... @Column(length = 5) @Size(min = 3, max = 5) private String city; // ... }

6. Conclusion

이 글에서 우리는 @Size과 @Length 그리고 @Column length 속성의 차이점에 대해서 배웠습니다.

역시 영어 문서는 영어 문서 그대로 읽는게 제일 좋은것 같다. 번역하려니 영 의미 전달이 힘들다.

from http://go-coding.tistory.com/100 by ccl(A) rewrite - 2021-11-29 11:02:13