[JPA, Hibernate] Gradle 사용 시 hibernate 클래스 인식이 안되는 경우

김우진·2022년 10월 6일
0
post-thumbnail

서론

Infrean에서 제공하는 김영한님의 '자바 ORM 표준 JPA 프로그래밍'을 실습하던 중 발생한 문제입니다.

실습환경

  • JPA
  • Hibernate
  • H2 (2.1.4)
  • Gradle(6.7)

문제 발생

강의에서는 Maven 환경에 JPA의 구현체로 Hibernate를 사용중이었는데 Gradle로 실습을 따라하니 아래와 같이 Entity를 찾지 못하고 rollback을 하였다.

try{
    Member member = new Member();
    member.setId(2L);
    member.setName("helloA");

    System.out.println("============== BEFORE =============");
    em.persist(member);
    System.out.println("============== AFTER =============");
    tx.commit();
} catch (Exception e) {
    System.out.println(e.getMessage());
    tx.rollback();
} finally {
    em.close();
}

해결

검색을 해보니 나와 동일한 문제가 발생한 분이 계셨고 김영한 님께서 답장을 달아주신 문제였다.
강의와 다르게 Gradle을 사용해 발생한 문제로 빌드 환경에 따라 Hibernate의 클래스 인식이 자동으로 안되는 경우가 있는데 이에 해당하는 문제였다.

persistence.xml에 클래스를 직접 추가하여 인식하도록 해주었다.

<persistence-unit name="hello">
    <class>
        hellojpa.Member
    </class>
    <properties>
        <!-- 필수 속성 -->
        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
        <property name="javax.persistence.jdbc.user" value="sa"/>
        <property name="javax.persistence.jdbc.password" value=""/>
        <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/testdb"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

        <!-- 옵션 -->
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.use_sql_comments" value="true"/>
        <!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
    </properties>
</persistence-unit>

📌 참고
인프런의 Unknown Entity 오류 question

Infrean 강의 링크

자바 ORM 표준 JPA 프로그래밍 - 기본편

썸네일 출처

unsplash페이지의 Brett Jordan님

0개의 댓글