티스토리 뷰

문제

자바 프로젝트에서 JPA에 대해 실습하던 도중 JPAEntity를 인식하지 못하는 문제가 발생하였습니다.

hibernateh2 의존성도 잘 가져오고

persistence.xml도 참고하던 강의의 내용을 복사하였기에 잘 작성하였습니다.

@Entity 어노테이션도 잘 작성하였지만

public class Main {

    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

        tx.begin();

        try {
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close();
        }

        emf.close();
    }

}

코드를 돌렸을 때 설정해둔 속성과 다르게 해당 테이블이 자동으로 생성되지 않았습니다. 잘못 작성한 코드가 존재할까봐 몇 번이나 확인해보았지만 그러한 코드는 존재하지 않았습니다.

해결

위 문제를 해결하고자 구글링을 하던 도중 엔티티 클래스 설정이라는 글을 읽게 되었습니다. 해당 글에서는 JPA 구현체들을 보통 엔티티 클래스를 자동으로 인식하지만 환경에 따라 인식하지 못하는 경우도 존재한다고 설명하고 있습니다. 해결방법으로는 persistence.xml 파일에 <class> 태그를 이용하여 엔티티 클래스를 설정하는 과정이 필요하다고 합니다.

다음과 같이 사용하고자 하는 엔티티 클래스를 설정하였더니

해당 테이블을 생성하는 쿼리가 잘 나가는 것을 확인할 수 있었습니다. 추가로 검색한 결과 Gradle로 빌드를 진행하는 경우 클래스 인식이 자동으로 안 되는 경우가 존재한다고 합니다. 참고했던 강의에서는 Maven을 사용하여 빌드를 진행하였기에 다음과 같은 문제가 발생하지 않았습니다.

 

Gradle을 사용하는 경우 일일이 엔티티를 추가해줘야 할까라는 걱정이 생길 수도 있지만 실제 실무에서는 스프링과 함께 JPA를 사용하기에 스프링 자체적으로 자동으로 엔티티를 스캔하는 기능이 내장되어 있어 추가 설정 없이 잘 동작한다고 합니다. 순수 JPA만 사용할 시 빌드 환경에 따라 위와 같은 추가 작업이 필요한 것입니다.

참고

https://www.inflearn.com/questions/17098

'Spring > Spring Data' 카테고리의 다른 글

[JPA] 페치 조인(fetch join)이란?  (4) 2022.07.29
[JPA] 프록시와 로딩 전략  (0) 2022.07.20
JPA 연관관계 매핑 정리  (0) 2022.07.13
영속성 컨텍스트  (0) 2022.07.05
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday