티스토리 뷰
스프링 프로젝트
설계중인데,
엔티티를 만들고 있는데
not null 제약조건을 주기 위해서
@Column(nullable = false)를 썼는데
다른 팀에서는 @NotNull을 준 걸 봤다.
둘다 null을 허용하지 않는 건데 뭐가 다를까?
검색검색ㄱㄱㄱ
결론적으로 nullable = false 보다 @NotNull을 추천하고 있다.
@NotNull 어노테이션을 쓰면, 데이터베이스에 SQL 쿼리를 보내기 전에 예외가 발생한다.
JPA의 Repository 인터페이스가 잘못된 Entity를 저장할 때, ConstraintViolationException을 발생시킨다.
(그 때문에, @Valid나 @Validated 없이도 엔티티를 자연스럽게 검증할 수 있다)
물론 값이 검증에 맞지 않아도 객체를 생성하는 것은 가능했다.
또한, Bean Validation의 트리거가 EntityManager가 Flush된 이후이므로,
원하는 타이밍에 맞지 않아 의도치 않은 오류를 맞을 수도 있다.
그러나 nullable=false 로 @Column 어노테이션에 속성을 붙이면,
null을 넣은 엔티티를 생성하면 생성이 된 뒤 Repository에 전달되고,
이 값이 DB에 넘어간 뒤에 예외가 발생해 위험한 오류를 맞을 수 있다.
이렇게 둘의 장단점을 비교해 보았을 때,
@NotNull을 써서 DB와 서버 모두의 안정성을 챙기는 것이 좋겠다고 생각했다.
출처: https://kafcamus.tistory.com/15
이 블로그를 보고 @NotNull을 쓰는 것이 좀 더 안전하다는 것을 알게 됐고,
나도 얼른 수정했다.ㅎㅎ
** 추가로,
@Id @GeneratedValue
@Id는 pk를 주는 거고, null을 허용하지 않으니까
자동으로 GeneratedValue도 주니까 따로 @NotNull 어노테이션을 붙이지 않았다...
(혹시 null 뜨는 오류가 생기면,, 다시 붙여서 create해야지.. )
'2022 > review_note' 카테고리의 다른 글
정규화 종류 (0) | 2022.11.28 |
---|---|
쿼리문의 종류 (0) | 2022.11.28 |
디비버 오라클 연결 오류(ORA-12514) (0) | 2022.11.28 |
소스트리에 HEAD가 안 보일 때 (1) | 2022.11.02 |
오라클 클라우드 회원가입 오류 (0) | 2022.10.31 |