작성
·
222
1
bookRepository.save(Book("이상한 나라의 엘리스"))
해당 코드에서 오류가 발생하는데요
java.lang.NoSuchMethodError: 'void com.group.libraryapp.domain.book.Book.<init>(java.lang.String)'
이런 메세지가 뜨면서 동작을 안하네요.
init 메서드 관련해서 이슈가 있어 보이는데 감이 안오네요...
답변 2
1
0
안녕하세요 프로그램님!!!
앗 java.lang.NoSuchMethodError: 'void com.group.libraryapp.domain.book.Book.<init>(java.lang.String)' 이라는 에러가 나오는군요 😭
12강에서 나셨다면 현재 도메인 객체인 Book만 코틀린으로 바뀐 상황인 것으로 추측됩니다!!
우선 예상되는 해결책은 다음과 같습니다!!
1. jpa 플러그인이 잘 적용되어 있는지 확인한다
// build.gradle
plugins {
id "org.jetbrains.kotlin.plugin.jpa" version "1.6.21"
}
2. reflect 의존성이 잘 적용되어 있는지 확인한다
dependencies {
implementation("org.jetbrains.kotlin:kotlin-reflect:1.6.21")
}
3. 혹시나 Book.kt가 아래 코드와 다른 점이 있는지 확인한다 <--- 아마 이 확률이 제일 높을 것 같습니다!! 그 이유는 아래서 설명드리겠습니다!
제가 3번의 확률이 제일 높을 것 같다고 생각하는 이유는, 해당 에러가 Book 클래스의 '기본 생성자'가 없을 때 나는 에러라는 검색 결과가 있기 때문입니다!!
(제 블로그는 아니지만 관련 blog를 찾았어요! https://soobindeveloper8.tistory.com/244)
조금 더 정확히는 현재 에러에서 <init>(java.lang.String) 이라고 되어 있는데요! 이는 아마 Book 클래스의 생성사 중에 String만을 가지는 생성자가 없다는 의미 같습니다!
즉, java로 치면 new Book(String name) 라고 타이핑 할 수 없다는 것이죠!
그리고 적어주신 bookRepository.save(Book("이상한 나라의 엘리스"))는 문법을 보았을 때 Kotlin 문법을 사용하신 것으로 추정됩니다!! (즉 테스트 코드인 것 같아요!!)
여기서 import 하고 있는 Book이 정말 Kotlin Class Book인지, 그렇다면 그 Kotiln Class Book의 생성자 중에 default parameter 등을 사용해 String만을 가질 수 있는 생성자가 있는지 확인해보시면 더욱 좋을 것 같습니다~!
이때 Book.kt 파일을 Java로 Decompile 해보시면 생성자를 조금 더 자세히 확인하실 수 있을 겁니다! 고생 너무너무 많으십니다!! 👍👍
질문 주셔서 감사합니다 ㅎㅎㅎㅎ 꼭 해결 되었으면 좋겠네요~!! 🔥
혹시나 계속해서 진행이 어려우시다면, 번거로우시겠지만 관련 코드를 스샷해주시거나 프로젝트 전체를 압축해주시면 제가 한 번 확인해보도록 하겠습니다!!!
감사합니다! 좋은 밤 되세요!!! 🙏🙇
오~ 다행입니다 ㅎㅎㅎㅎ 언제든지 어려운 점 있으시면 편하게 질문 주세요~!!!
감사합니다!!!