kotlin 환경에서 redisHash entity id field val로 선언 시 발생하는 오류

xlwdn·2023년 6월 1일
0

Short description


아래의 간단한 API를 테스트하던 중, 갑작스러운 500 오류가 발생했습니다.

	override fun checkCode(email: String, code: String): Boolean {
        if (codeRepository.findByEmail(email).orElse(null)?.code == code) return true
        return false
    }

framework.data.keyvalue.core.UncategorizedKeyValueException: No accessor to set property 
@org.springframework.data.annotation.Id()private final java.lang.String 
com.we.webackend.domain.user.persistance.entity.Code.id!;
nested exception is java.lang.UnsupportedOperationException: No accessor to set property 
@org.springframework.data.annotation.Id()private final java.lang.String 
com.we.webackend.domain.user.persistance.entity.Code.id!] with root cause

java.lang.UnsupportedOperationException: No accessor to set property @org.springframework.data.annotation.Id()private final java.lang.String com.we.webackend.domain.user.persistance.entity.Code.id!

위 로그 내용을 살펴보면 private final에 대한 accessor가 존재하지 않는다는 이야기인데, 이해가 되지 않아 구글링해본 결과 해당 내용과 유사한 내용이 존재했습니다.


제 코드 또한 위 내용과 동일한 형태로 작성되어있었습니다.

@RedisHash
class Code(
    email: String,
    code: String
) {
    @Id
    val id: String = email + code
        protected set

}

Resolution


답변인즉 Spring Data 2.1부터 immutable objects를 지원하고 더 이상 final을 업데이트 하지 않겠다는 이야기였습니다. kotlin에서 val로 선언 시 java final로 변환되므로 발생한 문제였습니다.

0개의 댓글