JPA 시작하기

minjun kim·2025년 6월 19일

JPA

목록 보기
2/4

일단 여기서는 maven을 쓰기 때문에 강의에 맞춰서 따라가겠다.

JPA를 설정하기위해 persistence.xml을 작성해준다.

  • /META-INF/persistence.xml에 위치
  • persistence-unit name으로 이름 지정
  • javax.persistence로 시작: JPA 표준 속성
  • hibernate로 시작: 하이버네이트 전용 속성

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="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="jakarta.persistence.jdbc.user" value="sa"/>
            <property name="jakarta.persistence.jdbc.password" value=""/>
            <property name="jakarta.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.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>

</persistence>

diarect이란 방언이 존재

  • JPA는 특정 DB에 종속 X
  • 각각의 DB가 제공하는 SQL 문법과 함수는 조금씩 다르다.

그래서 각 하이버네이트.dialect 속성에 지정

H2 : org.hibernate.dialect.H2Dialect
Oracle 10g : org.hibernate.dialect.Oracle10gDialect
MySQL : org.hibernate.dialect.MySQL5InnoDBDialect

@Entity : JPA가 관리할 객체

@Id : DB PK와 매핑

주의사항

  • 엔티티 매니저 팩토리는 하나만 생성 애플리케이션 전체 공유
  • 엔티티 매니저는 쓰레드간에 공유 X (사용하고 버려야함)
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행

JPQL

  • JPA를 사용하면 엔티티 객체를 중심으로 개발
  • 문제는 검색 쿼리
  • 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색
  • 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능
  • 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색조건이 포함된 SQL이 필요

- 하이버네이트(hibernate)

JPA는 인터페이스고
자바에서 ORM을 하기 위한 인터페이스(표준). javax.persistence.* 이런 것들

하이버네이라는건 JPA의 구현체
JPA 기능을 실제로 구현한 프레임워크 (구현체). org.hibernate.*

JPA는 규칙서 📜, 하이버네이트는 실제 구현된 제품 🛠️
profile
배움의 흔적을 남기고 싶습니다.

0개의 댓글