๐งถ Spring | Spring Boot/Spring Data JPA
JPA Persistence(์์์ฑ, ์ ๋ฐ์ ์ธ ๊ธฐ๋ณธ ๊ฐ๋ ์ค๋ช )
- -
๐ข JPA๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ํฌ๊ฒ ์ํฐํฐ์ ํ ์ด๋ธ์ ๋งคํํ๋ ์ค๊ณ ๋ถ๋ถ๊ณผ ๋งคํํ ์ํฐํฐ๋ฅผ ์ค์ ์ฌ์ฉํ๋ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ์ด ์ ๋ฆฌ ๊ธ์ Hibernate๋ฅผ ๊ธฐ์ค์ผ๋ก ๋งคํํ ์ํฐํฐ๋ฅผ EntitiyManager๋ฅผ ํตํด ์ฌ์ฉํ๋ ๋ฒ์ ์ ๋ฆฌํด ๋์์ต๋๋ค.
JPA ๊ตฌ์กฐ
- ์์ฒญ์ด ์ฌ ๋๋ง๋ค EntityManagerFactory๋ฅผ ํตํด EntityManager๋ฅผ ์์ฑํฉ๋๋ค.
- EntityManager๋ ๋ด๋ถ์ ์ผ๋ก DB ์ปค๋ฅ์ ์ ํตํด DB๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Entity Manager Factory
- EntityManager๋ฅผ ์์ฑํฉ๋๋ค.
- ์์ฑ ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์ ํ๋๋ง ์์ฑํด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์์ ๊ณต์ ํ์ฌ ์ฌ์ฉํฉ๋๋ค.
- ์ค์ ์ ๋ณด๋ฅผ ์ฝ์ด JPA๋ฅผ ๋์์ํค๊ธฐ ์ํ ๊ธฐ๋ฐ ๊ฐ์ฒด ์์ฑ ๋ฐ ์ปค๋ฅ์
ํ ์์ฑ ๋ฑ์ผ๋ก ์ธํด ์์ฑ ๋น์ฉ์ด ํฝ๋๋ค.
- J2SE ํ๊ฒฝ์์๋ ์ปค๋ฅ์ ํ์ ์์ฑํ๊ณ , J2EE ํ๊ฒฝ์์๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ ๋ฐ์ดํฐ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋๋ง ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋๋ง ์์ฑํฉ๋๋ค.
- ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํด๋ ์์ ํฉ๋๋ค.
- ์ค์ ์ ๋ณด๋ฅผ ์ฝ์ด JPA๋ฅผ ๋์์ํค๊ธฐ ์ํ ๊ธฐ๋ฐ ๊ฐ์ฒด ์์ฑ ๋ฐ ์ปค๋ฅ์
ํ ์์ฑ ๋ฑ์ผ๋ก ์ธํด ์์ฑ ๋น์ฉ์ด ํฝ๋๋ค.
Entity Manager
- ์ํฐํฐ๋ฅผ ์ ์ฅ, ์์ , ์ญ์ , ์กฐํํ๋ ๋ฑ ์ํฐํฐ์ ๊ด๋ จ๋ ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌํฉ๋๋ค.
- EntityManagerFactory๋ฅผ ํตํด์ ์์ฑํฉ๋๋ค.
- ์์ฑ ๋น์ฉ์ด ๊ฑฐ์ ๋ค์ง ์์ต๋๋ค.
- ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๋ฉด ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ ๊ฐ์ ์ ๋ ๊ณต์ ํ๋ฉด ์๋ฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ด ๊ผญ ํ์ํ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์ ์ป์ต๋๋ค.
- ๋ณดํต ํธ๋์ญ์ ์ ์์ํ ๋ ์ปค๋ฅ์ ์ ํ๋ํฉ๋๋ค.
// EntityManagerFactory ์์ฑ
// ํ๋ผ๋ฏธํฐ๋ก persistence.xml ํ์ผ์ persistence-unit name ์ ๋ฃ์ด์ค๋๋ค.
EntityManagerFactory emf = Persistence.createEntityMangerFactory("persistence-unit name");
// EntityManager ์์ฑ
EntityManager em = emf.createEntityManager();
Persistence Context
- ์์์ฑ ์ปจํ ์คํธ๋ผ๋ ์๋ฏธ๋ก ์ํฐํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ๋ ผ๋ฆฌ์ ์ธ ํ๊ฒฝ์ ๋ปํฉ๋๋ค.
- EntityManager๋ฅผ ํตํด Persistence Context์ ์ ๊ทผํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- EntityManager๋ก Entity๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๋ฉด EntityManager๋ Persistence Context์ Entity๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- EntityManager๋ฅผ ์์ฑํ ๋๋ง๋ค ํ๋์ฉ ๋ง๋ค์ด์ง๋๋ค.
- ์ํฐํฐ ๋งค๋์ ์์ ๋ ผ๋ฆฌ์ ์ธ ์ ์ฅ์๊ฐ ํ๋ ์๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
- ์ฌ๋ฌ EntityManager๊ฐ ๊ฐ์ Persistence Context์ ์ ๊ทผํ ์๋ ์์ต๋๋ค.
Persistence Context ํน์ง
- ์ํฐํฐ๋ฅผ ์๋ณ์ ๊ฐ์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค.
- ์์ ์ํ๋ ๋ฐ๋์ ์๋ณ์ ๊ฐ์ด ์์ด์ผ ํฉ๋๋ค.
- ํธ๋์ญ์ ์ ์ปค๋ฐํ ๋ ์์์ฑ ์ปจํ ์คํธ์ ์๋ก ์ ์ฅ๋ ์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํฉ๋๋ค.
Persistence Context ์ด์
1์ฐจ ์บ์
- ์์์ฑ ์ปจํ ์คํธ๋ ๋ด๋ถ์ ์บ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์์ ์ํ์ ์ํฐํฐ๋ ๋ชจ๋ ์ด๊ณณ์ ์ ์ฅ๋ฉ๋๋ค.
- 1์ฐจ ์บ์์ ํค๋ ์๋ณ์ ๊ฐ์ด๊ณ ์๋ณ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ ํค์ ๋งคํ๋์ด์์ต๋๋ค.
- ์ํฐํฐ ์กฐํ ์, ๋จผ์ 1์ฐจ ์บ์์์ ์ฐพ์ ๋ฐํํฉ๋๋ค.
- ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์กฐํํ์ฌ ์ํฐํฐ๋ฅผ ์์ฑํ๊ณ 1์ฐจ ์บ์์ ์ ์ฅํ ํ ์์ ์ํ์ ์ํฐํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฑ๋ฅ์ ์ด์ ์ ํฌ๊ฒ ์๋ค๊ณ ํฉ๋๋ค.
- EntityManager๋ฅผ ํธ๋์ญ์ ๋จ์๋ก ๋ง๋ค๊ณ ํธ๋์ญ์ ์ด ์ข ๋ฃ๋๋ฉด ์ญ์ ๋๋๋ฐ, 1์ฐจ ์บ์๋ EntityManager์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ด ํฉ๋๋ค.
- ๋ง์ ์์ฒญ์ด ๋ค์ด์ค๋๋ผ๋ ์์ฒญ๋ค์ ๊ฐ์์ ํธ๋์ญ์ ์ ๊ฐ์ง๋ฉด์ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ 1์ฐจ ์บ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ ํธ๋์ญ์ ๋ณ๋ก ์ฐฐ๋์ ์๊ฐ์ด๋ผ ํฌ๊ฒ ์ฑ๋ฅ์ ์ด์ ์ ์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
// ๋จผ์ 1์ฐจ ์บ์์์ ์ํฐํฐ๋ฅผ ์ฐพ์ต๋๋ค.
// ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์กฐํํ์ฌ ์ํฐํฐ๋ฅผ ์์ฑํ๊ณ 1์ฐจ์บ์์ ์ ์ฅํ ํ ์์ ์ํ์ ์ํฐํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
Member member = em.find(Member.class,"member1");
๋์ผ์ฑ ๋ณด์ฅ
- ๋์ผํ ์๋ณ์๋ก ์กฐํํ๋ฉด 1์ฐจ ์บ์์ ์๋ ๊ฐ์ ์ํฐํฐ ์ธ์คํด์ค๋ฅผ ๋ฐํํฉ๋๋ค.
- ๋์ผ์ฑ : ์ฐธ์กฐ ๊ฐ ๋น๊ต, ์ค์ ์ธ์คํด์ค๊ฐ ๋์ผ
- ๋๋ฑ์ฑ : ๊ฐ ๋น๊ต, ์ค์ ์ธ์คํด์ค๋ ๋ค๋ฅผ ์๋
Member a = em.find(Member.class,"member1");
Member b = em.find(Memeber.class,"member1");
System.out.println(a == b) // true
ํธ๋์ญ์ ์ ์ง์ํ๋ ์ฐ๊ธฐ ์ง์ฐ
- ์ํฐํฐ ๋งค๋์ ๋ ํธ๋์ญ์
์ ์ปค๋ฐํ๊ธฐ ์ง์ ๊น์ง ๋ด๋ถ ์ฟผ๋ฆฌ ์ ์ฅ์์ SQL์ ๋ชจ์๋์๋ค๊ฐ ์ปค๋ฐํ ๋ ๋ชจ์๋ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณด๋
๋๋ค.
- ํธ๋์ญ์
์ ์ปค๋ฐํ๋ฉด ์ํฐํฐ ๋งค๋์ ๋ ์ฐ์ ์์์ฑ ์ปจํ
์คํธ๋ฅผ flush ํฉ๋๋ค.
- flush ๋ ์์์ฑ ์ปจํ ์คํธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๊ธฐํํ๋ ์์ ์ ๋ปํฉ๋๋ค.
- ๊ทธ ํ, ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ์ปค๋ฐํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋ฉ๋๋ค.
- ํธ๋์ญ์
์ ์ปค๋ฐํ๋ฉด ์ํฐํฐ ๋งค๋์ ๋ ์ฐ์ ์์์ฑ ์ปจํ
์คํธ๋ฅผ flush ํฉ๋๋ค.
// ์ํฐํฐ ๋งค๋์ ๋ก ํธ๋์ญ์
์ ์์ฑํฉ๋๋ค.
EntityTransaction transaction = em.getTransaction();
// ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํธ๋์ญ์
๋ด์์ ์ฒ๋ฆฌ๋์ด์ผํ๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์
์ ์์ํฉ๋๋ค.
transaction.begin();
// 1์ฐจ ์บ์์ ์ ์ฅ๋ง ํด๋๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณด๋ผ SQL์ ๋ฐ๋ก ๋ณด๊ดํฉ๋๋ค.
em.persist(memberA);
em.persist(memberB);
// ํธ๋์ญ์
์ ์ปค๋ฐํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก SQL์ด ์ ์ก๋๋ฉฐ ๋ฐ์๋ฉ๋๋ค.
transaction.commint();
๐ hibernate ์ค์ ์ insert/update ์ฟผ๋ฆฌ๋ฅผ ์ํ๋ ๊ฐ์๋งํผ ๋ชจ์์ DB์ ๋ ๋ฆด ์ ์๋ ์ต์ ์ด ์์ต๋๋ค.
// ์คํ๋ง ๋ถํธ application.properties
spring.jpa.properties.hibernate.jdbc.batch_size = 100
๋ณ๊ฒฝ ๊ฐ์ง(Dirty Checking)
- ์ํฐํฐ ์์ ์,์๋ฐ ์ปฌ๋ ์
๋ค๋ฃจ๋ฏ ๋จ์ํ ์ํฐํฐ๋ฅผ ์กฐํํด์ ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํ๋ฉด ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋ฉ๋๋ค.
- JPA๋ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ๋ณด๊ดํ ๋, ์ต์ด ์ํ๋ฅผ ๋ณต์ฌํด์ ์ ์ฅํด๋๋๋ฐ ์ด๋ฅผ ์ค๋ ์ท์ด๋ผ ํฉ๋๋ค.
- flush ์์ ์ ์ค๋ ์ท๊ณผ ์ํฐํฐ๋ฅผ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ๋ ์ํฐํฐ๋ฅผ ์ฐพ๊ณ ๋ณ๊ฒฝ๋ ์ํฐํฐ๊ฐ ์์ผ๋ฉด ์์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ ์ฐ๊ธฐ ์ง์ฐ SQL ์ ์ฅ์์ ๋ณด๋ ๋๋ค.
- ์์์ฑ ์ปจํ ์คํธ๊ฐ ๊ด๋ฆฌํ๋ ์์ ์ํ์ ์ํฐํฐ์๋ง ์ ์ฉ๋ฉ๋๋ค.
- ์์ ์, ์ํฐํฐ์ ๋ชจ๋ ํ๋๋ฅผ ์
๋ฐ์ดํธ ํฉ๋๋ค.
- ํ๋์ ํ๋๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ๋ชจ๋ ์
๋ฐ์ดํธํฉ๋๋ค.
- ๋ชจ๋ ํ๋๋ฅผ ๋์์ผ๋กํ ์ฟผ๋ฆฌ๋ฌธ์ด ๋๊ฐ๋๋ค.
- ๋ชจ๋ ํ๋๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ์์ ์ฟผ๋ฆฌ๊ฐ ํญ์ ๊ฐ๊ธฐ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก๋ฉ ์์ ์ ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด๋๊ณ ์ฌ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋์ผํ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ผ๋ฉด ์ด์ ์ ํ๋ฒ ํ์ฑ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ๋๊ฐ ๋ง๊ฑฐ๋ ์ ์ฅ๋๋ ๋ด์ฉ์ด ๋๋ฌด ํฌ๋ฉด ์์ ๋ ๋ฐ์ดํฐ๋ง ์ฌ์ฉํด์ ๋์ ์ผ๋ก UPDATE SQL์ ์์ฑํ๋ ์ ๋ต์ ์ ํํ๋ฉด ๋ฉ๋๋ค.
- @DynamicUpdate : ๋ฐ์ดํฐ ์ ์ฅ ์, ์์ ๋ ๋ฐ์ดํฐ๋ง์ผ๋ก sql์ ๋์ ์์ฑ
- ์ปฌ๋ผ์ด 30๊ฐ ์ด์์ผ ๋ ์ฌ์ฉํ๋ฉด ์ ์ ์์ ์ฟผ๋ฆฌ๋ณด๋ค ๋ ๋น ๋ฆ
- @DynamicInsert : ๋ฐ์ดํฐ ์ ์ฅ ์, null์ด ์๋ ํ๋๋ง์ผ๋ก sql์ ๋์ ์์ฑ
- @DynamicUpdate : ๋ฐ์ดํฐ ์ ์ฅ ์, ์์ ๋ ๋ฐ์ดํฐ๋ง์ผ๋ก sql์ ๋์ ์์ฑ
- ํ๋์ ํ๋๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ๋ชจ๋ ์
๋ฐ์ดํธํฉ๋๋ค.
Member member = em.find(Member.class,"member1");
// ๋ณ๊ฒฝ ๊ฐ์ง๋ก ์ํฐํฐ ์์
member.setName("dokuny");
@Entity
// ์์ ๋ ๋ฐ์ดํฐ๋ง ์ฌ์ฉํด์ ๋์ ์ผ๋ก SQL์ ์์ฑํ๋ ์ด๋
ธํ
์ด์
@org.hibernate.annotation.**DynamicUpdate**
public class Member{}
์ง์ฐ ๋ก๋ฉ (lazy - loading)
- ์๋ฐ ๊ฐ์ฒด ๋ด์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ ๋ ๋ถ๋ฌ์ค๋ ๊ฒ์ ์ง์ฐ ๋ก๋ฉ์ด๋ผ ํฉ๋๋ค.
- ์ค์ ๊ฐ์ฒด ๋์ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ก๋ฉํด๋๊ณ ํด๋น ๊ฐ์ฒด๋ฅผ ์ค์ ์ฌ์ฉํ ๋ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ฟผ๋ฆฌ๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค.
- ์ฆ์๋ก๋ฉ์ join์ ํตํด์ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ๋ค๊ฐ์ด ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ๋๋ค.
- ์ค๋ฌด์์๋ ์ผ๋จ ์ง์ฐ๋ก๋ฉ์ผ๋ก ์ค์ ํด๋ ๋ค ์ต์ ํ๊ฐ ํ์ํ ๋ถ๋ถ์ ์ฆ์๋ก๋ฉ์ ์ฌ์ฉํฉ๋๋ค
- ์ ํํ๋ fetch join์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ์กฐํํ๋ ์ต์ ํ๋ฅผ ์งํํฉ๋๋ค.
Flush
- ์์์ฑ ์ปจํ ์คํธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- flush()๋ฅผ ์คํํ๋ฉด ๋ณ๊ฒฝ ๊ฐ์ง๊ฐ ๋์ํ ํ, ๋ชจ์๋ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์กํฉ๋๋ค.(๋ฑ๋ก, ์์ , ์ญ์ ์ฟผ๋ฆฌ)
- flushํ๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง ์
๋๋ค.
- ์ง์ ํธ์ถ
- ํธ๋์ญ์ ์ปค๋ฐ์ ์๋ ํธ์ถ
- JPQL ์ฟผ๋ฆฌ ์คํ ์ ์๋ ํธ์ถ
- FlushModeType์ผ๋ก ๋ชจ๋๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
// FlushModeType.AUTO : ์ปค๋ฐ,์ฟผ๋ฆฌ ์คํ ์ ํ๋ฌ์ (๊ธฐ๋ณธ๊ฐ)
// FlushModeType.COMMIT : ์ปค๋ฐ ์์๋ง ํ๋ฌ์
em.setFlushMode(FlushModeType.COMMIT);
- flush๋ฅผ ํ๋๋ผ๋ 1์ฐจ ์บ์๋ ์ ์ง๋ฉ๋๋ค.
Entity LifeCycle
Entity๋ 4๊ฐ์ง ์ํ๋ฅผ ๊ฐ์ต๋๋ค.
๋น์์ (new / transient)
- Persistence Context์ ์ ํ ๊ด๊ณ๊ฐ ์๋ ์ํ
// ๊ฐ์ฒด๋ฅผ ๋ง ์์ฑํ ์ํ
Member member = new Member();
์์ (managed)
- Persistence Context์ ์ ์ฅ๋ ์ํ
- persist()๋ฅผ ํตํด์ ์ํฐํฐ๋ฅผ Persistence Context๊ฐ ๊ด๋ฆฌํ๋๋ก ํฉ๋๋ค.
// Persistence Context๊ฐ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌ
em.persist(member);
์ค์์ (detached)
- Persistence Context์ ์ ์ฅ๋์๋ค๊ฐ ๋ถ๋ฆฌ๋ ์ํ
- Persistence Context๊ฐ ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ์ง ์์ต๋๋ค.
- ์์์ฑ ์ปจํ ์คํธ๊ฐ ์ ๊ณตํ๋ ์ด๋ ํ ๊ธฐ๋ฅ๋ ๋์ํ์ง ์์ต๋๋ค.
- ์ด๋ฏธ ํ๋ฒ ์์์ํ์๊ธฐ ๋๋ฌธ์ ์๋ณ์ ๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์์์ฑ ์ปจํ ์คํธ๊ฐ ๊ด๋ฆฌํ์ง ์์ผ๋ฏ๋ก ์ง์ฐ๋ก๋ฉ๋ ํ ์ ์์ต๋๋ค.
- detach() , clear() , close() ๋ก ์ํฐํฐ๋ฅผ ์ค์์ ์ํ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
- merge() ๋ฅผ ํตํด ์ค์์ ์ํ์ ์ํฐํฐ๋ฅผ ๋ค์ ์์ ์ํ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
// ์์ ์ํ์ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ
์คํธ๊ฐ ๊ด๋ฆฌํ์ง ์๋ ์ํ
em.detach(member);
// ์ค์์ ์ํ -> ์์ ์ํ
em.merge(member);
// ์์์ฑ ์ปจํ
์คํธ๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋
em.clear();
// ์์์ฑ ์ปจํ
์คํธ๋ฅผ ๋ซ์ผ๋ฉด ์์์ฑ ์ปจํ
์คํธ๊ฐ ๊ด๋ฆฌํ๋ ์ํฐํฐ๋ ์ค์์ ์ํ๊ฐ ๋ฉ๋๋ค.
em.close();
์ญ์ (removed)
- ์ญ์ ๋ ์ํ
// ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ
์คํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ญ์
em.remove(member);
๐ ์ง๊ธ ๊ณต๋ถํ ๊ฐ๋ ๋ค์ ์ ๊ธฐ์ตํด๋์ด์ผ ํ์ ์ง์ ์ฌ์ฉํ ๋ ํท๊ฐ๋ฆฌ์ง ์์ต๋๋ค.
์์ ์ํ์ผ ๋ 1์ฐจ ์บ์์์ ์กฐํํ๊ธฐ ๋๋ฌธ์ DB์ ์กฐํ์ฟผ๋ฆฌ๊ฐ ์๋๊ฐ๋ค๋๊ฐ, ์ง์ฐ๋ก๋ฉ ๋ฐ ๋ณ๊ฒฝ๊ฐ์ง ๋ถ๋ถ์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ถ๋ถ์ด๋ค๋ณด๋ ์ ์์๋๊ณ ๋์ด๊ฐ์ ์ผ ํฉ๋๋ค.
์ค์ ๋ก๋ EntityManager๋ฅผ ๋ถ๋ฌ๋ค๊ฐ ์ธ ์ผ์ด ๊ฐ๋ ํ ์คํธ ์ฝ๋ ์์ฑํ ๋ ๋นผ๊ณ ๋ ์๊ณ ๋๋ถ๋ถ Spring Data JPA๋ฅผ ์ด์ฉํด ์ฒ๋ฆฌํฉ๋๋ค. ๊ทธ๋๋ ๊ธฐ๋ณธ์ ์ธ ์๋ ๋ฐฉ์์ ์์ ๋ด์ฉ๋ค์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ ๊ผญ ์ ๊ธฐ์ตํ๋๋ก ํฉ์๋ค.
์ฐธ๊ณ ์๋ฃ
- ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ
'๐งถ Spring | Spring Boot > Spring Data JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JPA๋? (0) | 2022.10.24 |
---|---|
Spring JDBC Template ์ฌ์ฉ๋ฒ (0) | 2022.10.21 |
Java๋ก JDBC ์ฌ์ฉํ๊ธฐ (0) | 2022.10.21 |
JDBC / SQL Mapper / ORM (0) | 2022.10.21 |
Contents
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค