강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jipps
jipps

câu hỏi đã được viết

Trong thực tế! Phát triển ứng dụng quản lý thư viện với Kotlin và Spring Boot (tái cấu trúc dự án Java)

Bài học 12. Thay đổi lớp miền thành Kotlin - Book.java

Book.java Kotlin으로 변경 후 오류 문의

Viết

·

686

1

안녕하세요.

12강 에서 처럼 Book.java를 Book.kt kotlin 코드로 변경하고 나서 테스트코드 수행하면 아래와 같은 오류가 발생합니다. 확인해야 될 사항이 뭐가 있을까요.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bookRepository' defined in com.group.libraryapp.domain.book.BookRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.group.librayapp.domain.book.Book

 

javaspringkotlinspring-bootrefactoring

Câu trả lời 4

1

jipps님의 프로필 이미지
jipps
Người đặt câu hỏi

이런, librayapp 으로 패키지명이 잘못되어 있었네요.
수정하여 정상 테스트 되는 거 확인하였습니다.

감사합니다. 😅

0

태현님 안녕하세요!

저도 같은 에러가 발생했는데

build.gradle 에

implementation 'org.jetbrains.kotlin:kotlin-reflect:1.2.41'

을 추가하니까 해결 되었습니다..! 혹시 원인을 알 수 있을까요?

 

 

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요 승원님!! 새로 올려주신 질문 글에 답변 드렸습니다! 감사합니다! 😊 🙏

0

jipps님의 프로필 이미지
jipps
Người đặt câu hỏi

@Entity는 붙어 있습니다. 아래 전체 소스입니다.

 

package com.group.librayapp.domain.book

import java.lang.IllegalArgumentException
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id

@Entity
class Book(
    val name: String,
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long? = null,

) {
    init {
        if (name.isBlank()) {
            throw IllegalArgumentException("이름은 비어 있을 수 없습니다.")
        }
    }
}

 

 

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요~! 오 그러네요~!! https://wakestand.tistory.com/742 에서도 언급되는 것처럼 Not a managed type 은 지정한 객체에서 @Entity 를 찾지 못한 경우가 유일하거든요!

 

아 지금 혹시 패키지가 library 가 아니라 libray 일까요?!!

@SpringBootApplication 이라고 붙어 있는 어노테이션은 본인과 본인 패키지 하위의 @Entity @Service 등을 스캔하게 되는데, 만약 코틀린의 패키지를 구성하실 때 Java와 다르게 오타가 난다면, 스프링 서버가 @Entity 를 인식하고 있지 못할 수도 있습니다!

 

즉, 우리는 @Entity 라고 달아주었지만, 스프링 서버 (@SpringBootApplication) 와 패키지가 달라 스프링이 인지하지 못한 것이지요!!

Kotlin 쪽의 패키지와 Java 쪽의 패키지를 비교해보시면 좋을 것 같습니다!! 😊

0

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요, jipps님!! 😊

올려주신 stack trace를 보니 가장 근원적인 에러가 다음으로 나오는 것 같습니다!

java.lang.IllegalArgumentException:
  Not a managed type:
  class com.group.librayapp.domain.book.Book

 

이 에러는, Book이 JPA가 관리하는 객체가 아니라는 뜻이에요!!

때문에 BookRepository를 만들어주실 때 타입 인자로 넣어주신 Book 객체에 @Entity 이 붙어있는지 확인해보시면 좋을 것 같습니다!!!

 

혹시 그래도 잘 안되시면 편하게 또 질문 남겨 주셔요~!!! 주말에도 열심히 공부하시다니 정말 멋지시네요!! 응원 드립니다!! 🎉🎉

감사합니다!! 🙏

 

Hình ảnh hồ sơ của jipps
jipps

câu hỏi đã được viết

Đặt câu hỏi