[κΉμν_μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ] 2. μμμ± κ΄λ¦¬
πΏ μμμ± μ»¨ν μ€νΈλ?
- μμμ± μ»¨ν μ€νΈλ Entityλ₯Ό μꡬ μ μ₯νλ νκ²½μ΄λ€. EntityManagerλ₯Ό ν΅ν΄μ μμμ± μ»¨ν μ€νΈμ μ κ·Όνλ€.
μμμ± μ»¨ν μ€νΈλ νΈλμμ λ¨μλΌλ κ²μ΄ μ€μνλ€.
EntityManager.persist(entity);
- Entityκ° μμμ± μ»¨ν μ€νΈμμ κ΄λ¦¬λλ μνλ₯Ό μμμ΄λΌκ³ νκ³ , κ΄λ¦¬λμ§ μλ μλ‘μ΄ μνλ₯Ό λΉμμμ΄λΌκ³ νλ€.
persist()λ₯Ό νλ©΄, μμ μνκ° λλ€. μ¦, persist()λ μ¬μ€ μν°ν°λ₯Ό DBμ μ μ₯νλ ν¨μκ° μλλΌ, μμμ± μ»¨ν μ€νΈμ λ£λ ν¨μμ΄λ€. μν°ν°κ° μ€μ λ‘ DBμ μ μ₯λλ μμ μ νΈλμμ μ΄ commit() λ λμ΄λ€.
πΏ μμμ± μ»¨ν μ€νΈμ μ΄μ
- 1μ°¨ μΊμ (νλμ νΈλμμ λ΄μμ)
Ex 1)
Member member = new Member();
member.setId(103L);
member.setName("HelloJPA");
entityManager.persist(member);
Member findMember3 = entityManager.find(Member.class, 103L);
μ΄λ κ² persist()λ₯Ό νλ©΄, 1μ°¨ μΊμμ μν°ν°κ° μ μ₯λλ€. λ°λΌμ ν΄λΉ νΈλμμ λ΄μμ find()λ₯Ό μ€ννλ©΄, DBμ SELECT 쿼리λ₯Ό λ λ¦¬μ§ μκ³ , 1μ°¨ μΊμμμ μν°ν°λ₯Ό μ°Ύμμ¨λ€.
Ex 2)
Member findMember1 = entityManager.find(Member.class, 101L);
Member findMember2 = entityManager.find(Member.class, 101L);
μ΄λ κ² μ°μμ μΌλ‘ find()λ₯Ό νλ κ²½μ°μλ 첫λ²μ§Έ find()μμλ DBμ SELECT 쿼리λ₯Ό λ 리μ§λ§, λλ²μ§Έ find()μμλ DBμ μ κ·Όνμ§ μκ³ , 1μ°¨ μΊμμμ μν°ν°λ₯Ό κ°μ Έμ¨λ€.
- μμ Entityμ λμΌμ± 보μ₯
Member a = em.find(Member.class, 100L);
Member b = em.find(Member.class, 100L);
System.out.println(a == b); //λμΌμ± λΉκ΅ true
- μ°κΈ° μ§μ°
persist()λ₯Ό νλ©΄ 1μ°¨ μΊμ λΏλ§ μλλΌ, μ°κΈ° μ§μ° SQL μ μ₯μμλ ν΄λΉ INSERTλ¬Έμ΄ μ μ₯λλ€.
μ μ₯λ INSERTλ¬Έλ€μ νΈλμμ μ΄ μ»€λ°ν λ DBμ μ€νλλ€.
em.persist(memberA);
em.persist(memberB);
//μ¬κΈ°κΉμ§ INSERT SQLμ λ°μ΄ν°λ² μ΄μ€μ 보λ΄μ§ μλλ€.
//컀λ°νλ μκ° λ°μ΄ν°λ² μ΄μ€μ INSERT SQLμ 보λΈλ€.
transaction.commit();
- λ³κ²½ κ°μ§
μ λ² κΈμμλ μΈκΈνλ―μ΄ Entityμ μμ±(Ex. name)μ λ³κ²½νκ³ μ ν λ set()λ§ ν΄μ£Όλ©΄ λλ€. (= persistν νμ X)
μ΄λ μμμ± μ»¨ν μ€νΈμμ DBμ commit()νκΈ° μ μ, 1μ°¨ μΊμμ μλ μν°ν°μ μ²μ μν(findν λΉμμ μν)μ λ§μ§λ§ μνλ₯Ό λΉκ΅νλ κ³Όμ μ κ±°μΉκΈ° λλ¬Έμ΄λ€.
Member findMember = entityManager.find(Member.class, 160L);
findMember.setName("Changed");
- Entity μμ
Member findMember = entityManager.find(Member.class, 160L);
entityManager.remove(findMember);
πΏ νλ¬μ(Flush)λ?
νλ¬μλ μμμ± μ»¨ν μ€νΈμ λ³κ²½ λ΄μ©μ DBμ μ€μ λ‘ λ°μνλ κ²μ΄λ€.
νΈλμμ commit()μ μλμΌλ‘ νλ¬μλ₯Ό νΈμΆνλ€. JPQL 쿼리λ₯Ό μ€νν λλ νλ¬μλ μλμΌλ‘ νΈμΆλλ€. μ§μ em.flush()λ‘ νλ¬μλ₯Ό νΈμΆν μλ μλ€.
νλ¬μλ μμμ± μ»¨ν μ€νΈλ₯Ό λΉμ°λ κ²μ΄ μλλΌ, μμμ± μ»¨ν μ€νΈμ λ³κ²½ λ΄μ©μ DBμ λκΈ°ννλ κ²μ΄λ€.