๋ชฉํ
- ๊ฐ์ฒด์ ํ ์ด๋ธ ์ฐ๊ด๊ด๊ณ์ ์ฐจ์ด๋ฅผ ์ดํด
- ๊ฐ์ฒด์ ์ฐธ์กฐ์ ํ ์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๋งคํ
๊ฐ์ฒด์ ํ ์ด๋ธ ์ฐ๊ด๊ด๊ณ์ ์ฐจ์ด๋ฅผ ์ดํด
๊ฐ์ฒด๋ฅผ ํ ์ด๋ธ์ ๋ง์ถ์ด ๋ชจ๋ธ๋ง ํ์ ๋ ๋ฌธ์ ์ (์ฐธ์กฐ ๋์ ์ ์ธ๋ ํค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ)
ํ๋ ฅ ๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์๋ค.
ํ ์ด๋ธ์ ์ธ๋ ํค๋ก ์กฐ์ธ์ ์ฌ์ฉํด์ ์ฐ๊ด๋ ํ ์ด๋ธ์ ์ฐพ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๋ฒ๊ฑฐ๋ก์ด ์ฝ๋๊ฐ ๋ฐ์๋๋ค.
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setUsername("member1");
// ์ธ๋ํค ์๋ณ์๋ฅผ ์ง์ ๋ค๋ฃฌ๋ค.
member.setTeamId(team.getId());
em.persist(member);
// ๋ฉค๋ฒ์ ํ์ ์ฐพ๊ณ ์ถ์ ๋ ๋ฒ๊ฑฐ๋ก์
Member findMember = em.find(Member.class,member.getId());
Long findTeamId = findMember.getTeamId();
Team findTeam = em.find(Team.class,findTeamId);
๊ฐ์ฒด์ ์ฐธ์กฐ์ ํ ์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๋งคํ
๋จ๋ฐํฅ ์ฐ๊ด๊ด๊ณ
๊ฐ์ฒด ์งํฅ ๋ชจ๋ธ๋ง (๊ฐ์ฒด ์ฐ๊ด๊ด๊ณ ์ฌ์ฉ)
์๋์ ๊ฐ์ด Member์์ Team์ ๋ฐ๋ก ๋ถ๋ฌ์ฌ ์ ์๋ค.
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
member.setTeam(team);
em.persist(member);
Member findMember = em.find(Member.class, member.getId());
Team findTeam = findMember.getTeam();
tx.commit();
์๋ฐํฅ ์ฐ๊ด๊ด๊ณ์ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ
์์ชฝ์์ ์ฐธ์กฐํด์ ๋ณผ ์ ์๊ฒ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ๋๊ฒ
ํ ์ด๋ธ ๊ด๊ณ๋ ๋ณํจ์ด ์๋ค ํ ์ด๋ธ์ ์ธ๋ ํค๋ก ์กฐ์ธ์ ์ฌ์ฉํด์ ์๋ก๋ฅผ ์กฐํํ ์ ์๋ค. (๋ฐฉํฅ์ด ์๋ค)
Team ํด๋์ค์ ์๋์ ๊ฐ์ด ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งคํํด์ฃผ์๋ค. mappedBy ์์ ์ฌ์ฉํ team์ ์ฐ๊ด๊ด๊ณ๊ฐ ๋งบ์ด์๋ Member ํด๋์ค์์ @ManyToOne์ ๊ฑธ์ด์ค ๋ณ์์ ์ด๋ฆ์ ๋ฃ์ด์ JPA์๊ฒ ์๋ ค์ค๋ค.
@OneToMany(mappedBy = "team")
private List<Member> memberList = new ArrayList<>();
Member findMember = em.find(Member.class, member.getId());
List<Member> memberList = findMember.getTeam().getMemberList();
for(Member mem : memberList){
System.out.println(mem.getUsername());
}
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด findMember.getTeam ์ ์ฐพ์ ํด๋น Team์ MemberList๋ฅผ ์กฐํํ๋ค. ์ด์ฒ๋ผ ์๋ก์ ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๋ ๊ฒ์ด ์๋ฐํฅ ์ฐ๊ด๊ด๊ณ ์ด๋ค.
์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ๊ณผ mappedBy
๊ฐ์ฒด์ ์๋ฐฉํฅ ๊ด๊ณ๋ ์๋ก ๋ค๋ฅธ ๋จ๋ฐฉํฅ ๊ด๊ณ 2๊ฐ์ด๋ค. -> ๊ฐ์ฒด๋ฅผ ์๋ฐฉํฅ์ผ๋ก ์ฐธ์กฐํ๋ ค๋ฉด ๋จ๋ฑกํฅ ์ฐ๊ด๊ด๊ณ๋ฅผ 2๊ฐ ๋ง๋ค์ด์ผ ํ๋ค.
ํ ์ด๋ธ์ ์ธ๋ ํค ํ๋๋ก ๋ ํ ์ด๋ธ์ ์ฐ๊ด๊ด๊ณ๋ฅผ ๊ด๋ฆฌํ๋ค. (ํค ํ๋๋ก ์์ชฝ ์กฐ์ธ)
์๋ฐฉํฅ ๋งคํ ๊ท์น
- ๊ฐ์ฒด์ ๋ ๊ด๊ณ์ค ํ๋๋ฅผ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ผ๋ก ์ง์
- ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ๋ง์ด ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌ( ๋ฑ๋ก, ์์ )
- ์ฃผ์ธ์ด ์๋์ชฝ์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ ํ๊ณ mappedBy ์์ฑ์ ์ฌ์ฉํ์ฌ ์ฃผ์ธ์ ์ง์ ํด์ผ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋๊ตฌ๋ฅผ ์ฃผ์ธ์ผ๋ก ์ ํด์ผ ํ ๊น?
์ธ๋ ํค๊ฐ ์๋ ๊ณณ์ ์ฃผ์ธ์ผ๋ก ์ ํด๋ผ!
Member - Team ์ด ์๋ค๋ฉด ๋ค ์ธ Member๋ฅผ ์ฃผ์ธ์ผ๋ก ํ๋ค.
Team์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ ๊ฐ์ง ๋งคํ์ด๋ค.
๋น์ง๋์ค ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ์ฃผ์ธ์ ์ ํํ๋ฉด ์๋๋ค. [๋ค] ์ชฝ์ ์ฃผ์ธ์ ๊ฑธ์ด์ฃผ๋๊ฒ ์ข๋ค.
์๋ฐฉํฅ ๋งคํ์ ๊ฐ์ฅ ๋ง์ด ํ๋ ์ค์
-> ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ๊ฐ์ ์ ๋ ฅํ์ง ์์
์๋ฅผ๋ค์ด team.getMembers().add(member) ๋ก ์ฃผ์ธ์ด ์๋ ๊ณณ์๋ง ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด
์๋์ ๊ฐ์ด Memberํ ์ด๋ธ์ TEAM_ID ๊ฐ ๋งคํ๋์ง ์๋๋ค.
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setName("aejeong");
team.getMembers().add(member);
// ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ๊ฐ์ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค.
member.setTeam(team);
em.persist(member);
ํ์ง๋ง ์์ ๊ฐ์ฒด ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ๋ฉด ํญ์ ์์ชฝ๋ค ๊ฐ์ ์ ๋ ฅํด์ผ ํ๋ค.
์๋๋ฉด ์ฐ๊ด๊ด๊ณ ํธ์ ๋ฉ์๋๋ฅผ ์์ฑํ๋ค.
์ด๋์ ๋ฃ๋ ์๊ด์๋ค. ํ์ชฝ์์๋ง ํด์ฃผ๋๊ฒ ์ข๋ค ์์ชฝ์์ ํด์ฃผ๋ฉด ๋ฌดํ๋ฃจํ์ ์ํ์ด ์๋ค.
private List<Member> members = new ArrayList<>();
public void addMember(Member member){
member.setSteam(this);
member.add(member);
}
toString(), lombok, JSON ์์ฑ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฅผ ์ฌ์ฉ์ ๋ฌดํ๋ฃจํ๋ฅผ ์กฐ์ฌํ์.
๋จ๋ฐํฅ ๋งคํ๋ง์ผ๋ก๋ ์ด๋ฏธ ์ฐ๊ด๊ด๊ณ ๋งคํ์ ์๋ฃ๋๊ฒ์ด๋ค.
์ฒ์ ์ค๊ณํ ๋ ์ฐ์ ๋จ๋ฐํฅ๊ด๊ณ๋ก ํ๋ค. ์๋ฐฉํฅ์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์กฐํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๊ฒ ๋ฟ์ด๋ค.
JPQL์์ ์ญ๋ฐฉํฅ์ผ๋ก ํ์ํ ์ผ์ด ๋ง์์ ํ์ํ ๋ ์ถ๊ฐํด๋ ๋๋ค. ํ ์ด๋ธ์ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ!
'๐ WEB > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
6. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ณ ๊ธ๋งคํ (0) | 2021.05.17 |
---|---|
5. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๋ค์ํ ์ฐ๊ด๊ด๊ณ ๋งคํ (0) | 2021.05.14 |
3. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ์ํฐํฐ ๋งคํ (0) | 2021.05.13 |
2. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๋ด๋ถ ๋์ ๋ฐฉ์ (0) | 2021.05.13 |
1. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ฐ๋จํ ์ค์ต (0) | 2021.05.13 |