ERD에 따라 엔티티를 설정해주다보면 varchar(10), varchar(100)등 길이가 정해져 있다.
이때 @Column의 옵션을 사용하거나 @Size 어노테이션을 이용해 엔티티에도 설정해줄 수 있다.
@Size
와@Length
는 비슷하다. 둘다 필드의 크기에 검증하기위해 사용하며. @Size
는 Java-standard annotation이고 @Length
는 specific to Hibernate다.
하지만 @Column
은 DDL을 컨트롤 하기위해 사용되는 JPA annotation이다.
@Column은 실제 데이터베이스 열의 특정 특성을 나타내기 위해 사용된다.
length보다 긴 문자열을 넣으려고 하면 SQL error가 나타난다.
유효성 검사를 제공하지 않으므로 테이블 열 속성 지정에만 사용된다.
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
@Column(length=50)
private String title;
...
}
@Column 과 @Size를 같이 사용해 bean 검증을 통해 테이터베이스 열 특성을 지정할 수 있다
@Entity
public class User {
// ...
@Column(length = 5)
@Size(min = 3, max = 5)
private String city;
// ...
@Size가 JPA와 Hinernate로부터 독립적인 bean을 만들어주며, 결과적으로 @Length보다 @Size가 가볍다
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
@Size(min = 3, max=50)
private String title;
...
}
이와 같이 @Size 를 사용할 경우 두가지 이득이 있다.
참고
JPA @Column과 @Size 차이 무엇을 사용해야 할까
@Size, @Length, @Column 차이점