에러원인
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
'Java' 카테고리의 다른 글
JPA 데이터베이스 스키마 자동 생성 (0) | 2024.01.31 |
---|---|
JPA 객체와 테이블 매핑 (0) | 2024.01.31 |
JPA 구현체 하이버네이트 사용방법 (0) | 2024.01.27 |
JPA 란? (1) | 2024.01.21 |
[Spring] variable not initialized in the default constructor 에러 (0) | 2024.01.11 |