반응형
JPA에서 NOTNULL 속성을 둘 중에 어떤 어노테이션으로 관리해야할지 고민이 있었다.
둘을 공부해보자!
@NotNull
- @Jakarata.validation의 어노테이션이다.
- 하지만 Entity의 column에 달려있으면 hibernate가 인식하여 NotNull을 DDL에도 반영해준다.
- 이때 NotNull을 DDL에 추가해주는 것은 JPA의 기본 동작이 아닌, hibernate의 작동 방식임
@Column(nullable = false)
- jakarta.persistence의 어노테이션이다.
- database column의 null 속성을 지정해주는 어노테이션으로 기본은 true이다.
@Column(nullable = false) vs @NotNull
공통점
- DDL에 NOT NULL을 넣어준다.
- Null을 넣으려고 하면 예외가 발생한다.
차이점
@Column(nullable = false)
- DataIntegrityViolationException
- 실제 DB에 insert문이 실행이 되었을 때 예외가 발생한다.
@NotNull
- ConstraintViolationException
- hibernate가 flush()를 하는 시점에 유효성검증을 할 때 예외가 발생한다.
그렇다면 NotNull 을 사용해야할까 , @Column(nullable=false)를 사용해야할까?
나의 결론은 @NotNull을 사용하자는 결론을 내렸다.
이유는
1. DB까지 가기전, 빠르게 애플리케이션 레벨에서 검증하고, 예외를 처리할 수 있다.
2. DB(infra)의 schema에 의존하지 않고 business 단에서 처리하므로, DB 설정에 영향을 받지 않을 수 있다.
반응형
'Programming > Spring' 카테고리의 다른 글
[Spring] 스프링 빈 왜 쓰세요 ? (4) | 2025.06.09 |
---|---|
[JPA] Entity에서 @Table, @Entity, @Column의 name을 정의해주어야할까? (2) | 2025.05.26 |
[JPA] Entity에서 사용되는 Annotation 정리 (@Table, @Entity, @Column, @Enumerated, @Temporal .. ) (2) | 2025.05.26 |
[스프링] DTO에 @NoArgsConstructor와 @Gettter이 필요한 이유 (3) | 2024.07.30 |
[스프링] - findByIN절, jdbc batchUpdate (bulk Insert)로 쿼리 개선 (0) | 2024.05.29 |