JPA

hibernate entitymanager ์˜์กด์„ฑ

devJK93 2024. 12. 5.

๐Ÿ“ 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์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€