๐ Hibernate EntityManager๋?
Hibernate EntityManager๋ Hibernate ํ๋ ์์ํฌ์์ JPA(Java Persistence API)์ ํต์ฌ ํด๋์ค์ธ EntityManager
๋ฅผ ๊ตฌํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ์ด๋ฅผ ํตํด Hibernate๋ JPA ํ์ค์ ๋ฐ๋ฅด๋ ORM(Object-Relational Mapping) ๋๊ตฌ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
1. EntityManager๋?
EntityManager
๋ JPA(Java Persistence API)์์ ์ ๊ณตํ๋ ์ฃผ์ ์ธํฐํ์ด์ค๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
(์ฝ์
, ์กฐํ, ์์ , ์ญ์ )์ ์ํํ๋ ์ญํ ์ ํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ:
- ์ํฐํฐ์ ์์์ฑ ๊ด๋ฆฌ: ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ฑฐ๋ ์ญ์ . ์ํฐํฐ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ํ ๋๊ธฐํ.
- ํธ๋์ญ์ ๊ด๋ฆฌ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ํธ๋์ญ์ ๋จ์๋ก ์ฒ๋ฆฌ.
- ์ฟผ๋ฆฌ ์คํ: JPQL(Java Persistence Query Language) ๋๋ ๋ค์ดํฐ๋ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํ.
2. Hibernate EntityManager์ ์ญํ
Hibernate๋ JPA์ ๊ตฌํ์ฒด๋ก, EntityManager
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ JPA์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ์์กด์ฑ์ ์ถ๊ฐํ๋ฉด Hibernate๊ฐ JPA ํ์ค API(EntityManager
)๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
Hibernate EntityManager์ ์ญํ :
- JPA ํ์ค ์ธํฐํ์ด์ค(
EntityManager
)๋ฅผ Hibernate ์คํ์ผ๋ก ๊ตฌํ. - JPA ํ์ค API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ํธ์์ฉ ์ฒ๋ฆฌ.
- Hibernate ๊ณ ์ ์ ๊ธฐ๋ฅ๋ JPA์ ํจ๊ป ์ฌ์ฉํ ์ ์๋๋ก ์ง์.
3. Hibernate EntityManager ์์กด์ฑ ์ถ๊ฐ
Hibernate 5.x:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.36.Final</version>
</dependency>
Note: Hibernate 5.2 ์ดํ์๋ hibernate-core
์ EntityManager ๊ตฌํ์ด ํตํฉ๋์ด, hibernate-entitymanager
๋ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค.
Hibernate 6.x:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.2.6.Final</version>
</dependency>
4. EntityManager ์ฃผ์ ๋ฉ์๋
Hibernate๋ฅผ ํตํด JPA ํ์ค EntityManager
์ ์ฃผ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
์ฃผ์ ๋ฉ์๋:
persist(Object entity)
: ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅ.EntityManager em = entityManagerFactory.createEntityManager(); em.getTransaction().begin(); em.persist(new User("John Doe")); em.getTransaction().commit();
find(Class<T> entityClass, Object primaryKey)
: ์ฃผ์ด์ง ๊ธฐ๋ณธ ํค๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํฐํฐ๋ฅผ ๊ฒ์.User user = em.find(User.class, 1L);
remove(Object entity)
: ์์์ฑ ์ปจํ ์คํธ์์ ์ํฐํฐ๋ฅผ ์ ๊ฑฐ.em.remove(user);
merge(Object entity)
: ๋ถ๋ฆฌ๋(detached) ์ํ์ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ๋ณํฉ.User user = em.find(User.class, 1L); user.setName("Updated Name"); em.merge(user);
createQuery(String qlString)
: JPQL ์ฟผ๋ฆฌ๋ฅผ ์คํ.List<User> users = em.createQuery("SELECT u FROM User u", User.class).getResultList();
getTransaction()
: ํธ๋์ญ์ ์ ์์ํ๊ณ ์ข ๋ฃ.EntityTransaction transaction = em.getTransaction(); transaction.begin(); transaction.commit();
5. ์ Hibernate EntityManager๊ฐ ์ค์ํ๊ฐ?
Hibernate EntityManager๋ JPA ํ์ค์ ์ฌ์ฉํ๋ฉด์ Hibernate์ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ์ด์ :
- JPA ํ์ค ์ง์: JPA ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋ ์์ฑ → ๋ค๋ฅธ JPA ๊ตฌํ์ฒด(e.g., EclipseLink)๋ก ์ฝ๊ฒ ์ ํ ๊ฐ๋ฅ.
- Hibernate ๊ธฐ๋ฅ ํ์ฅ: JPA ํ์ค ์ธ์๋ Hibernate์ ๊ณ ๊ธ ๊ธฐ๋ฅ(Native SQL, ์บ์ฑ ๋ฑ)์ ํจ๊ป ์ฌ์ฉํ ์ ์์.
- ์ ์ฐ์ฑ: JPA์ ์ถ์ํ๋ API๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๊ฐ์ํ.
6. ๊ฒฐ๋ก
Hibernate EntityManager๋ JPA์ ํ์ค ์ธํฐํ์ด์ค์ธ EntityManager
๋ฅผ ๊ตฌํํ์ฌ, JPA API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด JPA์ ์ถ์ํ๋ ํ์ค๊ณผ Hibernate์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ๋ชจ๋ ํ์ฉํ ์ ์์ต๋๋ค.
- Hibernate 5.x ์ด์ :
hibernate-entitymanager
์์กด์ฑ์ ์ถ๊ฐํด์ผ ํจ. - Hibernate 5.2 ์ดํ:
hibernate-core
์ ํตํฉ๋์ด ๋ณ๋์ ์์กด์ฑ ์ถ๊ฐ๊ฐ ํ์ ์์.
๊ฒฐ๋ก ์ ์ผ๋ก, EntityManager
๋ JPA์ ํต์ฌ์ด๋ฉฐ, Hibernate๋ ์ด๋ฅผ ๊ตฌํํ์ฌ ORM์ ๊ฐ์ํํ๊ณ ์ฑ๋ฅ์ ๊ทน๋ํํฉ๋๋ค.
'JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JPA EntityManagerFactory, EntityManager๋ ์ฌ์ฉ ํ ๊ผญ ๋ซ์์ผ ํ๋ค (3) | 2024.12.05 |
---|---|
JPA ๊ตฌ๋๋ฐฉ์ (0) | 2024.12.05 |
em.persist vs em.merge (1) | 2024.11.30 |
๋๋ฉ์ธ ์ฃผ๋์ค๊ณ์ OOP์ ๊ด๊ณ์ ๋ํ chatGPT์์ ์ง์์๋ต (0) | 2024.11.24 |
JPA FetchType.EAGER์ N+1 ๋ฌธ์ & cascadeType.ALL ์ฌ์ฉ ์ด์ & ์ฐ๊ด๊ด๊ณ ํธ์ ๋ฉ์๋ (0) | 2024.11.24 |
๋๊ธ