Hibernate: @Where Clause 사용시 warning 메시지 해결

2015-12-17 15:31

Hibernate: @Where Clause 문서와 같이 Hibernate에서 제공하는 @Where를 사용해 문제를 해결하는 경우가 있다.

Hibernate: @Where Clause 문서의 예로 들고 있듯이 "soft delete" 문제를 해결하기 위해 테이블에 삭제 여부를 추가하는 경우 특히 유용하다.

slipp.net 또한 답변글을 보여줄 때 @Where를 활용해 해결했다.

@OneToMany(mappedBy = "question", fetch = FetchType.LAZY)
@Where(clause = "deleted = 'false'")
@OrderBy("answerId ASC")
private List<Answer> answers;

위와 같이 문제를 해결했는데 에러 로그를 확인해보니 다음과 같은 warning 메시지가 출력되는 이슈가 생겼다.

15:20:45.523 [WARN ] [http-nio-7070-exec-17] [o.h.e.jdbc.spi.SqlExceptionHelper] - Truncated incorrect DOUBLE value: 'false'
15:20:45.526 [WARN ] [http-nio-7070-exec-17] [o.h.e.jdbc.spi.SqlExceptionHelper] - SQL Warning Code: 1292, SQLState: 22007

원인을 파악해 보니 @Where 설정에 deleted = 'false'와 같이 설정한 이유 때문이다. 그래서 위 설정을 deleted = false로 수정했더니 완전히 다른 에러가 발생한다.

이 문제를 해결하기 위해 다시 원복하고 다른 방법을 찾으려다 다음과 같이 간단한 방법으로 해결했다.

@OneToMany(mappedBy = "question", fetch = FetchType.LAZY)
@Where(clause = "deleted = 0")
@OrderBy("answerId ASC")
private List<Answer> answers;

deleted = 0으로 수정했다. 100% 마음에 드는 해결책은 아니지만 warning 메시지도 사라졌고, 기능도 정상적으로 동작한다.

이와 관련해서는 Handling soft-deletes with Spring JPA 글에서도 참고할 수 있다.

0개의 의견 from SLiPP

의견 추가하기

연관태그

← 목록으로