티스토리 뷰

스프링 프로젝트

설계중인데,

엔티티를 만들고 있는데

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함