JPA 구동 방식
먼저 Persistence라는 클래스를 만듦
여기서 META-INF/persistence.xml에 있는 설정 정보를 읽어서 EntitiyManagerFactory라는 클래스를 만듦
그리고 EntityManagerFactory에서 필요할 때마다 EntityManager 생성

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="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>
여기서 설정 정보 조회
<persistence-unit name=”hello”>
JpaMain
package hellojpa;
import jakarta.persistence.*;
public class JpaMain {
public static void main(String[] args) {
// Persistence가 EntityManagerFactory 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
// EntityManagerFactory가 EntityManager 생성
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member member = new Member();
member.setId(2L);
member.setName("HelloB");
// 멤버 저장
em.persist(member);
// 정상적일 때
tx.commit();
} catch (Exception e) {
// 문제가 생겼을 때
tx.rollback();
} finally {
// 트랜잭션이 끝나면 반드시 EntityManager를 닫아야 함
em.close();
}
emf.close();
}
}
- EntityManagerFactory:
- EntityManager:
- EntityTransaction:
스프링부트에서?
JpaRepository는 EntityManagerFactory와 EntityManager를 자동으로 생성하고 관리합니다. 개발자가 직접 EntityManager를 생성하고 관리할 필요 없이, 스프링 부트가 이 모든 것을 내부적으로 처리해줍니다.
'Spring, JPA 🌱 > 김영한 JPA' 카테고리의 다른 글
[김영한 JPA] 준영속 상태 (detached) (0) | 2025.02.07 |
---|---|
[김영한 JPA] 플러시 (flush) (0) | 2025.02.07 |
[김영한 JPA] 영속성 컨텍스트(Pesistence Context)의 이점 (0) | 2025.02.07 |
[김영한 JPA] 영속성 컨텍스트 (Persistence Context) (1) | 2025.02.07 |
JPA 구동 방식
먼저 Persistence라는 클래스를 만듦
여기서 META-INF/persistence.xml에 있는 설정 정보를 읽어서 EntitiyManagerFactory라는 클래스를 만듦
그리고 EntityManagerFactory에서 필요할 때마다 EntityManager 생성

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="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>
여기서 설정 정보 조회
<persistence-unit name=”hello”>
JpaMain
package hellojpa; import jakarta.persistence.*; public class JpaMain { public static void main(String[] args) { // Persistence가 EntityManagerFactory 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // EntityManagerFactory가 EntityManager 생성 EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member member = new Member(); member.setId(2L); member.setName("HelloB"); // 멤버 저장 em.persist(member); // 정상적일 때 tx.commit(); } catch (Exception e) { // 문제가 생겼을 때 tx.rollback(); } finally { // 트랜잭션이 끝나면 반드시 EntityManager를 닫아야 함 em.close(); } emf.close(); } }
- EntityManagerFactory:
- EntityManager:
- EntityTransaction:
스프링부트에서?
JpaRepository는 EntityManagerFactory와 EntityManager를 자동으로 생성하고 관리합니다. 개발자가 직접 EntityManager를 생성하고 관리할 필요 없이, 스프링 부트가 이 모든 것을 내부적으로 처리해줍니다.
'Spring, JPA 🌱 > 김영한 JPA' 카테고리의 다른 글
[김영한 JPA] 준영속 상태 (detached) (0) | 2025.02.07 |
---|---|
[김영한 JPA] 플러시 (flush) (0) | 2025.02.07 |
[김영한 JPA] 영속성 컨텍스트(Pesistence Context)의 이점 (0) | 2025.02.07 |
[김영한 JPA] 영속성 컨텍스트 (Persistence Context) (1) | 2025.02.07 |