๐ JPA ๊ตฌ๋ ๋ฐฉ์
JPA์ ๊ตฌ๋ ๋ฐฉ์์ Persistence → EntityManagerFactory → EntityManager์ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ ๋๋ค. ์ฃผ์ ํด๋์ค์ ๊ตฌ๋ ๋ฐฉ์์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํฉ๋๋ค.
1. JPA์ ์ฃผ์ ํด๋์ค ๋ฐ ์ญํ
- Persistence:
- JPA ํ์ค์์ ์ ๊ณตํ๋ ์ ํธ๋ฆฌํฐ ํด๋์ค.
META-INF/persistence.xml
ํ์ผ์ ์ฝ์ด EntityManagerFactory๋ฅผ ์์ฑํ๋ ์ญํ .
- EntityManagerFactory:
- EntityManager๋ฅผ ์์ฑํ๊ธฐ ์ํ ํฉํ ๋ฆฌ ํด๋์ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ํฌํจํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ ๊ณต์ ๊ฐ๋ฅ.
- EntityManager:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค์ ์ํธ์์ฉ(์ฝ์ , ์กฐํ, ์์ , ์ญ์ ๋ฑ)์ ์ฒ๋ฆฌ.
- ์์์ฑ ์ปจํ ์คํธ(Persistence Context)๋ฅผ ๊ด๋ฆฌ.
2. JPA ๊ตฌ๋ ๋ฐฉ์
- persistence.xml ์ฝ๊ธฐ:
- JPA๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์
META-INF/persistence.xml
์ ์ฝ์ด ์ค์ ์ ๋ณด๋ฅผ ๋ก๋ํฉ๋๋ค.
- JPA๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์
- Persistence.createEntityManagerFactory() ํธ์ถ:
- Persistence ํด๋์ค๋
persistence.xml
ํ์ผ์ ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก EntityManagerFactory๋ฅผ ์์ฑํฉ๋๋ค.
- Persistence ํด๋์ค๋
- EntityManagerFactory ์์ฑ:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด ๋ฐ ORM ๋งคํ ์ ๋ณด๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
- EntityManager ์์ฑ:
- EntityManagerFactory๋ ํธ๋์ญ์ ๋จ์๋ก ์ฌ์ฉํ EntityManager๋ฅผ ์์ฑํฉ๋๋ค.
3. JPA ์คํ ํ๋ฆ
- Persistence.createEntityManagerFactory() ํธ์ถ:JPA ํ์ค ํด๋์ค์ธ Persistence๊ฐ
persistence.xml
์ ์ฝ์ด ์ค์ ์ ๋ก๋ํฉ๋๋ค. - EntityManagerFactory ์ด๊ธฐํ:๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด์ Hibernate Dialect๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
- EntityManager ์์ฑ:EntityManager๋ ๊ฐ ํธ๋์ญ์ ๋ง๋ค ์์ฑ๋๋ฉฐ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ํ:EntityManager๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ (CRUD)์ ์ํํฉ๋๋ค.
- ๋ฆฌ์์ค ์ ๋ฆฌ:EntityManager์ EntityManagerFactory๋ฅผ ๋ซ์ ๋ฆฌ์์ค๋ฅผ ํด์ ํฉ๋๋ค.
4. JPA ์ฝ๋ ์์
import javax.persistence.*;
@Entity
class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getter, Setter
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
public class JpaExample {
public static void main(String[] args) {
// 1. EntityManagerFactory ์์ฑ
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
// 2. EntityManager ์์ฑ
EntityManager em = emf.createEntityManager();
// 3. ํธ๋์ญ์
์์
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
// 4. ์ํฐํฐ ์ ์ฅ
User user = new User();
user.setName("John Doe");
em.persist(user);
// 5. ํธ๋์ญ์
์ปค๋ฐ
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
// 6. EntityManager ์ข
๋ฃ
em.close();
}
// 7. EntityManagerFactory ์ข
๋ฃ
emf.close();
}
}
5. ์ฃผ์ ํด๋์ค ์์ฝ
- Persistence ํด๋์ค:
- JPA ์ค์ ํ์ผ(
persistence.xml
)์ ์ฝ๊ณ EntityManagerFactory๋ฅผ ์์ฑํ๋ ์ญํ .
- JPA ์ค์ ํ์ผ(
- EntityManagerFactory ํด๋์ค:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐํ.
- EntityManager๋ฅผ ์์ฑํ๋ ํฉํ ๋ฆฌ ์ญํ .
- EntityManager ํด๋์ค:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๋ฉฐ, ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๊ด๋ฆฌ.
- EntityTransaction ํด๋์ค:
- ํธ๋์ญ์
์ ๊ด๋ฆฌํ๋ฉฐ, ์์(
begin
), ์ปค๋ฐ(commit
), ๋กค๋ฐฑ(rollback
) ์์ ์ ์ฒ๋ฆฌ.
- ํธ๋์ญ์
์ ๊ด๋ฆฌํ๋ฉฐ, ์์(
6. ๊ฒฐ๋ก
JPA๋ Persistence → EntityManagerFactory → EntityManager์ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํฉ๋๋ค. ์ด๋ฌํ ๊ณ์ธต์ ๊ตฌ์กฐ ๋๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ฑ๊ณผ ํ์ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค.
'JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JPA PK ์์ฑ์ ๋ต @GeneratedValue(strategy = GenerationType.โ) (0) | 2024.12.09 |
---|---|
JPA EntityManagerFactory, EntityManager๋ ์ฌ์ฉ ํ ๊ผญ ๋ซ์์ผ ํ๋ค (3) | 2024.12.05 |
hibernate entitymanager ์์กด์ฑ (0) | 2024.12.05 |
em.persist vs em.merge (1) | 2024.11.30 |
๋๋ฉ์ธ ์ฃผ๋์ค๊ณ์ OOP์ ๊ด๊ณ์ ๋ํ chatGPT์์ ์ง์์๋ต (0) | 2024.11.24 |
๋๊ธ