Difference Between @Size, @Length, and @Column(length=value)

Dev.Hammy·2023년 7월 1일
0

JPA_Hibernate

목록 보기
7/14

JSR-330의 @Size 어노테이션, Hibernate의 @Length 어노테이션, 그리고 JPA @Column어노테이션의 length 속성에 대해 알아보자.

JSR(Java Specification Request) : 자바 기술 표준 규격

JSR-330 : 이 JSR은 자바 의존성 주입(Dependency Injection)을 위한 표준화된 방법을 정의하고 프레임워크 간의 호환성과 개발자들의 일관된 코드 작성을 촉진하기 위해 개발되었습니다.

주로 javax.inject 패키지를 통해 정의된 어노테이션들로 구성되어 있습니다.

  • @Inject: 의존성 주입을 요청하는 필드, 생성자, 메서드에 사용되며, 해당 자원이 자동으로 주입되도록 지정합니다.
  • @Qualifier: 동일한 타입의 여러 의존성을 구분하기 위해 사용됩니다.
  • @Named: 특정 이름의 의존성을 주입하는 데 사용됩니다.
  • @Singleton: 싱글톤 스코프의 빈을 정의할 때 사용됩니다.

Origins

필드의 크기를 검증할 때 @Size, @Length 어노테이션을 사용할 수 있다. 전자는 JPA 표준 어노테이션이고 후자는 Hibernate에 한정된 것이다. JPA 어노테이션인 @Column은 DDL 명령문을 조정하기 위해 사용한다.

@Size

public class User {

    // ...

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

    // ...

}

검증을 위해 빈(bean) validation 어노테이션인 @Size를 사용한다. middleName 프로퍼티에 @Size를 annotate 하여 min, max 속성들의 값을 검증한다.
@Size는 JPA와 그 벤더(예를 들어 Hibernate)에 독립적인 bean을 만든다. 결과적으로 @Length보다 이식성이 좋다.

@Length

예시) lastName 필드를 @Length를 사용하여 범위 조정

@Entity
public class User {

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

    // ...

}

@Column(length=value)

@Entity
public class User {

    @Column(length = 3)
    private String firstName;

    // ...

}

데이터 베이스 열의 물리적 특성을 지정하기 위해 @Column을 사용한다. @Column의 length 속성을 이용해 열의 string 값 길이를 제한할 수 있다.
위 코드는 VARCHAR(3)으로 컬럼을 생성하고, 이보다 긴 스트링 값을 삽입하려 하면 SQL 에러를 발생시킬 것이다.
@Column은 테이블 열 속성을 지정할 때 사용할 뿐, 검증 기능을 제공하지는 않는다. 데이터베이스 열에 bean validation을 지정하고 싶다면 @Size를 같이 사용할 수 있다.

@Entity
public class User {

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

    // ...

}

0개의 댓글