Spring/Spring JPA ๊ธฐ๋ณธ
@MappedSuperclass ์์๋ฐ๋ ๊ฒ์ ์๋ , ํ
์ด๋ธ๊ณผ ๋งคํํ๋ ๊ฒ์ด ์๋ ๊ณตํต ์์ฑ(๋งคํ ์ ๋ณด)๋ง ์ ๊ณตํ ๋ ์ฌ์ฉํ๋ค. @MappedSuperclass public abstract class BaseEntity { private String createdBy; private LocalDateTime createDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; } ์ง์ ์์ฑํด์ ์ฌ์ฉํ ์ผ์ด ์์ผ๋ฏ๋ก ์ถ์ ํด๋์ค๋ก ๋ง๋ค์ public class Member extends BaseEntity ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์ ๋ฐ๋ ์์ ํด๋์ค์ ๋งคํ ์ ๋ณด๋ง ์ ๊ณตํ๋ค. ์กฐํ, ๊ฒ์์ด ๋ถ๊ฐํ๋ค ( em.find(BaseEntity..
Spring/Spring JPA ๊ธฐ๋ณธ
์์๊ด๊ณ ๋งคํ ์์๊ด๊ณ ๋งคํ์ด๋ , ๊ฐ์ฒด์ ์์ ๊ตฌ์กฐ์ DB์ ์ํผํ์
์๋ธํ์
๊ด๊ณ๋ฅผ ๋งคํํ๋ ๊ฒ์ด๋ค . ๊ฐ์ฒด ์์ ๊ตฌ์กฐ ๊ฐ์ฒด์๋ ์์๊ด๊ณ๊ฐ ์๋ค . ์ํผํ์
-์๋ธํ์
๋
ผ๋ฆฌ ๋ชจ๋ธ ํ์ง๋ง ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ๊ด๊ณ๊ฐ ์๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ํผํ์
,์๋ธํ์
๊ด๊ณ๋ผ๋ ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ์ด ๊ฐ์ฒด ์์๊ณผ ์ ์ฌํ๋ค. ์ํผํ์
์๋ธํ์
๋
ผ๋ฆฌ ๋ชจ๋ธ์ ์ค์ ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ก ๊ตฌํํ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. JOINED , SINGLE_TABLE , TABLE_PER_CLASS @Inheritance ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ํด๋์ค์์ ์ ๋ต์ ์ ํํ ์ ์๋ค. JOINED ๊ฐ๊ฐ ํ
์ด๋ธ์ ์์ฑํ๊ณ ์กฐํํ ๋๋ join ํ์ฌ ๊ฐ์ ธ์จ๋ค DTYPE : ํ์
์ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ปฌ๋ผ์ด๋ค. @Inheritance(strategy =..
Spring/Spring JPA ๊ธฐ๋ณธ
๋ค๋์ผ [N : 1] @ManyToOne ๋จ๋ฐฉํฅ Member(N) : Team(1) ์ ๋ค๋์ผ ๊ด๊ณ ํ์ชฝ์ด ๊ด๊ณ๋ฅผ ๋งบ์ ์ชฝ์ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ ๊ฒ์ ์๋ฏธ ํ๋์ ํ(1)์ ์ฌ๋ฌ ๋ฉค๋ฒ(N)๋ฅผ ๊ฐ๋๋ค Member.class @ManyToOne @JoinColumn(name = "team_id") private Team team; Many -> One Member(N) -> Team(1) name ์์ฑ์๋ ๋งคํํ ์ธ๋ ํค ์ด๋ฆ ์ง์ ํ๋ค. ๋ค๋์ผ [N : 1] OneToMany ์๋ฐฉํฅ Team ๊ฐ์ฒด์์ ๋ฐ๋์ชฝ Member ๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ List members ๋ฅผ ์์ฑํด์ค๋ค. ์ด๋ ๊ฒ ์์ฑํด์ค๋ ํ
์ด๋ธ์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค. @OneToMany(mappedBy = "team") private List memb..
Spring/Spring JPA ๊ธฐ๋ณธ
์ฐ๊ด๊ด๊ณ ๋งคํ ๊ฐ์ฒด์ ํ
์ด๋ธ ์ฐ๊ด๊ด๊ณ์ ์ฐจ์ด๋ฅผ ์ดํดํ์ ๊ฐ์ฒด์ ์ฐธ์กฐ์ ํ
์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๋งคํ ๊ฐ์ฒด๋ฅผ ํ
์ด๋ธ์ ๋ง์ถ์ด ๋ชจ๋ธ๋ง (์ฐ๊ด๊ด๊ณ๊ฐ ์๋ ๊ฐ์ฒด) Team @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; @Column(name = "TEAM_NAME") private String name; } Member @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; @Column(name = "T..
Spring/Spring JPA ๊ธฐ๋ณธ
์ํฐํฐ ๋งคํ @Entity @Entity public class Member { @Id @GeneratedValue private Long id; private String username; } @Entity๊ฐ ๋ถ์ ํด๋์ค๋ JPA๊ฐ ๊ด๋ฆฌ JPA๋ฅผ ์ฌ์ฉํด์ ํ
์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค๋ @Entity ํ์ ๊ธฐ๋ณธ ์์ฑ์ ํ์(ํ๋ผ๋ฏธํฐ๊ฐ ์๋ public ๋๋ protected ์์ฑ์) name ์์ฑ @Entity(name = "Member") public class Member { JPA์์ ์ฌ์ฉํ ์ํฐํฐ ์ด๋ฆ์ ์ง์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ: ํด๋์ค ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉ(์: Member) ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ์๋ ์์ฑ jpa: hibernate: ddl-auto: create DDL์ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์์ ์ ์๋ ์์ฑ ..
Spring/Spring JPA ๊ธฐ๋ณธ
PersistenceContext (์์์ฑ ์ปจํ
์คํธ) ์์์ฑ ์ปจํ
์คํธ๋ ์ํฐํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ์ด๋ผ๋ ๋ป์ด๋ค. ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์์ ๊ฐ์ฒด๋ฅผ ๋ณด๊ดํ๋ ๊ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ญํ ์ ํ๋ค. ์ํฐํฐ ๋งค๋์ ๋ฅผ ํตํด ์ํฐํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๋ฉด ์ํฐํฐ ๋งค๋์ ๋ ์์์ฑ ์ปจํ
์คํธ์ ์ํฐํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํ๋ค. public Long save(Member member) { em.persist(member); return member.getId(); } EntityManager.persist(member) : ์ํฐํฐ ๋งค๋์ ๋ฅผ ์ฌ์ฉํด ํ์ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ
์คํธ์ ์ ์ฅํ๋ค๋ ์๋ฏธ! ์ค์ ๋ก๋ DB์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ์์์ฑ ์ปจํ
์คํธ๋ฅผ ํตํด์ Entity๋ฅผ ์์ํํ๋ค๋ ๋ป์ด๋ค. ์ ํํ ๋งํ๋ฉด persi..
Spring/Spring JPA ๊ธฐ๋ณธ
JPA ๊ตฌ๋ ๋ฐฉ์ EntityManagerFactory ์ํฐํฐ ๋งค๋์ ๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๋ฉด ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ค๋ ๋ ๊ฐ์ ์ ๋ ๊ณต์ ํ๋ฉด ์ ๋๋ค. ๋์์ฑ(Concurrency): ์ ์ ๊ฐ ์ฒด๊ฐํ๊ธฐ์๋ ๋์์ ์ํํ๋ ๊ฑฐ ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ค์ ์ ์ ๊ฐ ์ฒด๊ฐํ ์ ์๋ ์งง์ ์๊ฐ๋จ์๋ก ์์
๋ค์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์ํํ๋ ๊ฒ์ด๋ค. ๋ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์๋๋ฐ ๋ค๋ฅธ ์ค๋ ๋์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์์ ํด๋ฒ๋ฆฌ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ์ํฐํฐ ๋งค๋์ ๋ ํ๋๋ฅผ ๊ณต์ ํ๋ฉด ์ ๋๊ณ , ์ํฉ์ ๋ฐ๋ผ ๊ณ์ ๋ง๋ค์ด์ค์ผํ๋ค. ์ํฐํฐ ๋งค๋์ ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ์ด๋ค. EntityManager Entity๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ์ํํ๋ ํด๋์ค์ด๋ค. ์ํฐํฐ ๋งค๋์ ๋ด๋ถ์ ์์์ฑ ์ปจํ
์คํธ(Persistence Context)..
Spring/Spring JPA ๊ธฐ๋ณธ
SQL ์ค์ฌ์ ์ธ ๊ฐ๋ฐ ๋ฌธ์ ์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์์๋ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ ๊ฐ์ฒด(์ ํํ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ ๊ฐ์ ๊ฐ์ง๋ ๋ณ์)๋ฅผ ํตํด ์ฐธ์กฐํฉ๋๋ค. ์ด์ ๋ฐํด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํจ๋ฌ๋ค์์ ํ
์ด๋ธ์ด ๋ค๋ฅธ ํ
์ด๋ธ์ ์ฐธ์กฐํ ๋ ๋ค๋ฅธ ํ
์ด๋ธ์ PK๋ฅผ FK๋ก ๊ฐ์ง์ ํตํด ์ฐธ์กฐํฉ๋๋ค. ORM Object-relational mapping(๊ฐ์ฒด ๊ด๊ณ ๋งคํ) ๊ฐ์ฒด๋ ๊ฐ์ฒด๋๋ก ์ค๊ณ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋๋ก ์ค๊ณ ORM ํ๋ ์์ํฌ๊ฐ ์ค๊ฐ์์ ๋งคํ https://www.inflearn.com/course/ORM-JPA-Basic/dashboard ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JP..