프로젝트 중 게시물의 조회수를 증가시키는 api를 개발중이였다.
처음에는 Style 테이블의 viewCount 컬럼을 NotNull
로 지정해줬었는데
save, update 등 기능에는 클라이언트에서 viewCount값을 받을 필요가없었다.
따라서 해당 dto등에서 viewCount 필드를 제거하였는데, 그러면 NotNull
제약조건때문에
제약조건 위반 (ConstraintViolationException
)예외가 발생하게된다.
따라서 @NotNull
어노테이션을 제거하니 아래 코드에서 0 + 1이 된게아니라 null + 1이 되어
NullPointerException
이 발생하였다.
이 문제를 해결하려면 mysql에서 컬럼에 기본값을 넣는 기능인 default
기능을 사용해야한다.
스프링 데이터 JPA에서는 아래 코드와 같이 구현할 수 있다.
@Column(columnDefinition = "Integer DEFAULT 0")
private Integer viewCount;
public void increaseViews(Integer viewCount) {
this.viewCount = viewCount + 1;
}
※수정사항
@NotNull
제약조건 추가 @NotNull
private long viewCount = 0;