본문 바로가기

Java

JPA Unknown entity 해결방법

에러원인

 

JPA 구현체인 하이버네이트 사용시 

 

@Entity 를 선언해줬음에도 아래와 같이 에러가 발생하는 경우가 있습니다.

java.lang.IllegalArgumentException: Unknown entity: package.class

 

@Entity
public class Member {

    @Id @GeneratedValue
    private Long id;
    private String name;

    // setter, getter ...

}

 

 

이는 Gradle 로 실행하였을때 자주 발생하는 에러입니다.

 

해당 에러의 원인은 @Entity 어노테이션은 persistence.xml 의 파일 위치와 클래스파일 위치가 동등한 디렉토리에 위치하여야 동작하게 됩니다.

 

동등한 디렉토리에 존재함

 

 

하지만 Gradle 로 빌드 시 아래와 같은 결과를 얻을 수 있습니다.

동등한 위치가 아님

( META-INF 폴더는 org 폴더와 동등한 위치에 존재해야함. )

 

따라서 @Entity 어노테이션이 동작하지 않아 Entity를 인식할 수 없게됩니다.

 


해결방법

 

META-INF 폴더를 패키지 최상위 폴더와 일치시켜주시면됩니다.

 

Intellij 의 기준으로 

 

Settings ( ctrl + alt + s ) 로 들어가서 

 

Build and run 항목을 Gradle 로 변경합니다.

 

 

그후 buidl.gradle 파일에 아래 코드를 추가하신 후 다시 실행시키면 됩니다.

sourceSets {
    main {
        output.resourcesDir = java.classesDirectory
    }
}

 

 

해당 방법이 되지 않았을 경우 

 

resources 폴더 하위의 META-INF 폴더를 최상위 디렉토리에 위치시킬 수 있게 gradle build 시 설정만 추가해주시면 해결되실겁니다.

 


참조

https://www.inflearn.com/questions/17098/unknown-entity-%EC%98%A4%EB%A5%98

https://discuss.gradle.org/t/jpa-entity-classes-are-not-discovered-automatically-with-gradle/11339/5