[JPA 기본편] - JPA 프로젝트 세팅하기 (JDK 11, Gradle, 스프링 부트 없이)

2023. 2. 5. 18:32·Spring/스프링 부트와 JPA 실무 완전 정복 로드맵

2023년 7월 기준으로 작성되었습니다.

스프링 완전 정복 로드맵을 DB 2편까지 마치고, JPA 로드맵으로 오니까 아무래도 예전 강의여서 그런지 호환되지 않은 내용이 많았다.

특히 기본편에서 JPA 시작하기 -> Hello JPA - 프로젝트 생성에서 스프링 부트 없이 Maven으로 프로젝트를 하시길래
여태까지 배웠던 것이 스프링 부트 + Gradle 조합이어서 처음에는 이렇게 프로젝트를 해보았다.

하지만 여러가지 문제에 봉착했고, 다음과 같은 QNA를 보고나서야 스프링 부트를 사용하는 것은 포기했다.


그래도 JDK 11, Gradle로 프로젝트를 진행하고 싶은 사람에게 발생할 수 있는 문제와 해결책을 모아보았다.

사용하는 IDE로 Gradle 프로젝트를 대충 생성한 다음

1. build.gradle에 의존성을 추가한다. (H2 데이터베이스는 1.4.200 기준)

implementation 'org.hibernate:hibernate-entitymanager:5.3.10.Final'
runtimeOnly 'com.h2database:h2:1.4.200'

02-08 변경점) hibernate 5.3.10 버전과 H2 데이터 베이스 1.4.200 사이에는 외래키가 매핑되어 있는 테이블은 삭제하지 못하는 문제점이 있다. 5.4.22 버전으로 변경한다.

implementation 'org.hibernate:hibernate-entitymanager:5.4.22.Final'

 

1-2. 그리고 JDK 11을 사용한다면, 다음 의존성도 추가한다. (자바 8에는 있고, 11에는 없는 라이브러리 추가)

implementation 'javax.xml.bind:jaxb-api:2.3.1'

 

07-19 변경점) 1-3. 이전 로드맵에서 배웠던 lombok을 사용하고 싶어서 다음 의존성도 추가했다.

// 스프링 부트는 없고, Gradle 5.X 이상 프로젝트에서 롬복을 사용하도록 추가 - 현재 1.18.28 버전
compileOnly 'org.projectlombok:lombok:1.18.28'
annotationProcessor 'org.projectlombok:lombok:1.18.28'

 


2. src/main/resources/META-INF/persistence.xml를 직접 만들고 다음 내용을 추가한다.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">

    <persistence-unit name="hello">
        <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/~/test"/>
            <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.id.new_generator_mappings" value="true"/>
            <!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
        </properties>
    </persistence-unit>
</persistence>

 


3. 그 다음 강의를 따라가다가 엔티티가 될 Member 클래스를 만들고 나면, Gradle에서는 인식을 잘 못하는 문제가 발생한다.

이 때, persistence.xml에 class 태그를 넣어서 해당 엔티티의 경로를 넣어 주면 해결이 된다.

예를 들면 이렇게

 <persistence-unit name="hello">
        <class>hellojpa.Member</class> <!-- gradle에서 Entity를 인식하지 못하는 문제 해결!-->
        <properties>
            <!-- 필수 속성 -->
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>

나중에 스프링을 사용하면, 엔티티를 인식하지 못하는 문제는 사라지니, 지금은 이렇게 사용하자!

'Spring > 스프링 부트와 JPA 실무 완전 정복 로드맵' 카테고리의 다른 글

[스프링 데이터 JPA 편] - 테스트를 위한 JUnit5에서 의존성 주입은 꼭 @Autowired로 해야 하는 이유  (0) 2023.03.01
'Spring/스프링 부트와 JPA 실무 완전 정복 로드맵' 카테고리의 다른 글
  • [스프링 데이터 JPA 편] - 테스트를 위한 JUnit5에서 의존성 주입은 꼭 @Autowired로 해야 하는 이유
달거달거
달거달거
개발자를 꿈꿉니다
  • 달거달거
    SWEE IT
    달거달거
  • 전체
    오늘
    어제
    • 분류 전체보기 (288)
      • 개발 환경 (5)
        • VSCode (1)
        • 파이썬 (Anaconda) (1)
        • Git (1)
        • Flutter (0)
        • Kotlin (1)
      • Spring (5)
        • 스프링 부트와 JPA 실무 완전 정복 로드맵 (2)
        • 스프링 부트와 AWS로 구현하는 웹 서비스 (1)
        • 채쌤의 스프링 부트 프로젝트 (1)
      • 알고리즘과 코딩 테스트 (16)
        • 파이썬 문법 (2)
        • 백준 25단계 (10)
        • 프로그래머스 코딩 테스트 고득점 Kit (1)
        • 코틀린 문법 (1)
      • 요리 (236)
      • 데이터베이스 (2)
        • MySQL (2)
      • 안드로이드 (11)
        • 연습 코드 (6)
        • 도서 내용 정리 (4)
      • Dart와 Flutter (5)
        • 도서 내용 정리 (4)
        • Flutter 위젯 정리 (1)
        • 15개 프로젝트 (2)
      • 피그마 (0)
        • 도서 내용 정리 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c++
    백준
    피그마
    Flutter
    아나콘다
    JPA
    vscode
    주석
    docker
    git
    안드로이드
    파이썬
    티스토리챌린지
    DART
    코틀린
    오블완
    문법
    데이터베이스
    spring
    코딩 테스트
    mysql
    알고리즘
    자취요리
    node.js
    프로그래머스
    머신러닝
    C
    AWS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
달거달거
[JPA 기본편] - JPA 프로젝트 세팅하기 (JDK 11, Gradle, 스프링 부트 없이)
상단으로

티스토리툴바