Entity(์ํฐํฐ)
JPA์์ ์ํฐํฐ๋ ์ฝ๊ฒ ์๊ฐํ๋ฉด, DB ํ ์ด๋ธ์ ๋์ํ๋ ํ๋์ ํด๋์ค๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
@Entity๊ฐ ๋ถ์ ํด๋์ค๋ JPA๊ฐ ๊ด๋ฆฌํด์ฃผ๋ฉฐ,
JPA๋ฅผ ์ฌ์ฉํด์ DB ํ ์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค๋ @Entity๋ฅผ ๊ผญ ๋ถ์ฌ์ผ๋ง ๋งคํ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ํฐํฐ ํด๋์ค๋ ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ํด๋์ค์ด๋ค.
์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ ์ ํ ์ํฐํฐ ํด๋์ค๋ฅผ ๊ตฌ์ฑํ๊ณ , ์์ฑ๋ ์ํฐํฐ ํด๋์ค๋ ๋ช ์ธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ 2์ฐจ์ ํ ์ด๋ธ
์ด ํ
์ด๋ธ์ ์๋น์ค์์ ํ์ํ ์ ๋ณด๋ฅผ ๋ค ์ ์ฅํ๊ณ ํ์ฉํ๊ฒ ๋๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ธ๋ก์ ์ด ๋ถ๋ถ์ด Column ์ด๊ณ , ๊ฐ๋ก์ ํ ๋ถ๋ถ์ด ์ํฐํฐ ๊ฐ์ฒด๊ฐ ๋๋ค.
์ด ํ ์ด๋ธ ์ ์ฒด๊ฐ ์ํฐํฐ ์ด๊ณ , ๊ฐ 1๊ฐ์ ํ๋ค์ด ์ํฐํฐ ๊ฐ์ฒด๊ฐ ๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
@Entity : ํด๋์ค ์์ ์ ์ธํ์ฌ ์ด ํด๋์ค๊ฐ ์ํฐํฐ์์ ์๋ ค์ค๋ค.
์ด๋ ๊ฒ ๋๋ฉด JPA์์ ์ ์๋ ํ๋๋ค์ ๋ฐํ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋ง๋ค์ด์ค๋ค.
ํ๋๋ผ๋ ๊ฒ์ ์ํฐํฐ์ ๊ฐ Column์ ์๋ฏธํ๋ค.
@Id : ํด๋น ์ํฐํฐ์ ์ฃผ์ ํค(Primary Key, PK)๊ฐ ๋ ๊ฐ์ ์ง์ ํด์ฃผ๋ ๊ฒ์ด @Id ์ด๋ค.
@GeneratedValue ๋ ์ด PK๊ฐ ์๋์ผ๋ก 1์ฉ ์ฆ๊ฐํ๋ ํํ๋ก ์์ฑ๋ ์ง ๋ฑ์ ๊ฒฐ์ ํด์ฃผ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
Repository
@Repository
public class MemberRepository
Entity์ ์ํด ์์ฑ๋ DB์ ์ ๊ทผํ๋ ๋ฉ์๋(ex) findAll()) ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํจ
์์์ ์ํฐํฐ๋ฅผ ์ ์ธํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์๋ค๋ฉด,
์ฌ๊ธฐ์ ์ด๋ค ๊ฐ์ ๋ฃ๊ฑฐ๋, ๋ฃ์ด์ง ๊ฐ์ ์กฐํํ๋ ๋ฑ์ CRUD(Create, Read, Update, Delete)๋ฅผ ํด์ผ ์ธ๋ชจ๊ฐ ์๋๋ฐ,
์ด๊ฒ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง ์ ์ํด์ฃผ๋ ๊ณ์ธต์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
EntityManager
@PersistenceContext
private EntityManager em;
@PersistenceContext : EntityManager๋ฅผ ๋น์ผ๋ก ์ฃผ์ ํ ๋ ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์
@PersistenceContext๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์
EntityManager๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํด์ผ ํ ์ ์
์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๋ฉด ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ
์ฐ๋ ๋ ๊ฐ์๋ EntityManager๋ฅผ ๊ณต์ ํด์๋ ์๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์คํ๋ง์ ์ฑ๊ธํค ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ์ ๋น์ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํฉ๋๋ค.
๊ทธ๋ฌ๋ @PersistenceContext์ผ๋ก EntityManager๋ฅผ ์ฃผ์ ๋ฐ์๋ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋ ์ด์ ๋
์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ด๊ธฐํ๋๋ฉด์ @PersistenceContext์ผ๋ก ์ฃผ์ ๋ฐ์ EntityManager๋ฅผ Proxy๋ก ๊ฐ์๋๋ค.
๊ทธ๋ฆฌ๊ณ EntityManager ํธ์ถ ์ ๋ง๋ค Proxy๋ฅผ ํตํด EntityManager๋ฅผ ์์ฑํ์ฌ Thread-Safe๋ฅผ ๋ณด์ฅํฉ๋๋ค.
EntityManager ๋ ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ค.
JPA๋ EntityManager๋ก ๋ชจ๋ ๊ฒ์ ๋์
์คํ๋ง๋ถํธ๊ฐ ์๋์ผ๋ก EntityManager๋ฅผ ์์ฑํด์ค ( ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ์ ๋ค ํ ์ํ )
์ฐ๋ฆฌ๋ ๋ง๋ค์ด์ง๊ฒ์ ์ธ์ ์ ๋ฐ์ผ๋ฉด ๋๋ค
PersistenceContext
์์์ฑ ์ปจํ ์คํธ๋ ์ํฐํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ์ด๋ผ๋ ๋ป์ด๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์์ ๊ฐ์ฒด๋ฅผ ๋ณด๊ดํ๋ ๊ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ญํ ์ ํ๋ค.
์ํฐํฐ ๋งค๋์ ๋ฅผ ํตํด ์ํฐํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๋ฉด ์ํฐํฐ ๋งค๋์ ๋ ์์์ฑ ์ปจํ ์คํธ์ ์ํฐํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํ๋ค.
public Long save(Member member) {
em.persist(member);
return member.getId();
}
EntityManager.persist(member) : ์ํฐํฐ ๋งค๋์ ๋ฅผ ์ฌ์ฉํด ํ์ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅํ๋ค๋ ์๋ฏธ!
์ค์ ๋ก๋ DB์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ์์์ฑ ์ปจํ
์คํธ๋ฅผ ํตํด์ Entity๋ฅผ ์์ํํ๋ค๋ ๋ป์ด๋ค.
์ ํํ ๋งํ๋ฉด persist() ์์ ์๋ Entity๋ฅผ ์์์ฑ ์ปจํ
์คํธ์ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
EntityManager๋ฅผ ํตํด์ ์์์ฑ ์ปจํ
์คํธ์ ์ ๊ทผํ๋ค.
EntityManager๊ฐ ์์ฑ๋๋ฉด 1:1๋ก ์์์ฑ ์ปจํ
์คํธ๊ฐ ์์ฑ๋๋ค.
https://whitepro.tistory.com/265