๊ฐ์ฒด ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฌ์ฉํด์ ์๋์ ๊ฐ์ฒด์ฐธ์กฐ์ ํ ์ด๋ธ์ ์ธ๋ํค๋ฅผ ๋งคํํ๋ ๋ฐฉ๋ฒ ํ์ต
๋จ๋ฐฉํฅ ๋งคํ
๊ฐ์ฒด๋ฅผ ํ ์ด๋ธ์ ๋ง์ถ์ด ๋ชจ๋ธ๋ง ํ๋ฉด ๊ฐ์ฒด์งํฅ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๋ค.
Member์์ ์ธ๋ ํค ์๋ณ์๋ฅผ ์ง์ ์กฐํํด์ ์กฐํํ ๋๋ Team์์ ๋ฐ๋ก ์กฐํํด์ผํ๋!
๊ฐ์ฒด๋ฅผ ํ ์ด๋ธ์ ๋ง์ถ์ด ๋ฐ์ดํฐ ์ค์ฌ์ผ๋ก ๋ชจ๋ธ๋งํ๋ฉด, ํ๋ ฅ๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์๋ค.
ํ ์ด๋ธ์ ์ธ๋ํค๋ก ์กฐ์ธ์ ์ฌ์ฉํด์ ์ฐ๊ด๋ ํ ์ด๋ธ์ ์ฐพ๋๋ค.
๊ฐ์ฒด๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์ฐพ๋๋ค.
Member
@Entity(name = "USER")
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ", //๋งคํํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ์ค ์ด๋ฆ
initialValue = 1, allocationSize = 1)
public class Member {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
@Column(name="TEAM_ID")
private Long teamId;
Team
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
}
Main
Team team = new Team();
team.setName("TEAM A");
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, team.getId());
ํด๊ฒฐ๋ฐฉ๋ฒ
Member ํ ์ด๋ธ์์ ๊ฐ์ฒด์ ์ฐธ์กฐ์ ํ ์ด๋ธ์ ์ธ๋ํค๋ฅผ ๋งคํํ๋ค.
Member : N - Team : 1
Member ์ ์ฅ์์๋ ๋ค๋์ผ (@ManyToOne)
๊ด๊ณ๋ฅผ ์ ์ธํ๊ณ ์กฐ์ธํ ์ปฌ๋ผ์ ๋งคํํจ.
// Member์
์ฅ์์๋ Many Team ์
์ฅ์์๋ One
@ManyToOne
// Joinํด์ผํ๋ ์ปฌ๋ผ์ด ๋ญ๋
@JoinColumn(name = "TEAM_ID")
private Team team;
์ฐ๊ด๊ด๊ณ๋ฅผ ์ ์ฅํ๊ณ , ์ฐธ์กฐ๋ก ์ฐ๊ด๊ด๊ณ๋ฅผ ์กฐํํ๋ค.
Team team = new Team();
team.setName("TEAM A");
em.persist(team);
Member member = new Member();
member.setUsername("member1");
// member.setTeamId(team.getId());
member.setTeam(team);
em.persist(member);
// Long findTeamId = findMember.getTeamId();
Member findMember = em.find(Member.class, member.getId());
findMember๋ฅผ ์กฐํ์ Member๋ฅผ ํตํด getTeam()์ผ๋ก ํ์ ๋ฐ๋ก ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
em.find()์ select ์ฟผ๋ฆฌ๊ฐ ๋ ๋ผ๊ฐ์ง ์๋๋ค.
persist()์ JPA ๋ด๋ถ์์ 1์ฐจ ์บ์๋ฅผ ์ ์ฅํ๊ณ ์๊ธฐ์, ์บ์์์ ๋ฆฌํดํ๋ค.
์ฝ๋์์ 1์ฐจ์บ์๋ฅผ ํด๋ฆฌ์ดํ๊ณ , ๋ฉค๋ฒ์ ํ์ ์ฐ๊ด๊ด๊ณ๋ฅผ ์กฐํํ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ฉด ์ ์ด์ JPA๊ฐ ์กฐ์ธ์ ํด์ ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ธ์ด์ ํ์ธํ ์ ์๋ค.
- ์บ์ ํด๋ฆฌ์ด
em.flush(); // ์ฑํฌ ๋ง์ถ๊ธฐ
em.clear(); // ์์์ฑ ์ปจํ ์ธ ๋น์ฐ๊ธฐ
@ManyToOne(fetch = FetchType.LAZY)
๋ ์ด์ง๋ก๋ฉ, ์ง์ฐ๋ก๋ฉ
์ค์ ์ฐ๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง ํ์ด Touch๋ ๋, ๊ทธ๋ Team์ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค์ ๊ฐ์ ธ์จ๋ค.
@ManyToOne(fetch = FetchType.EAGER)
์ฐ๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์กฐ์ธํด์ ๋จผ์ ๋ค ๊ฐ์ ธ์จ๋ค.
ํจ์น์ต์ ์ Default.
์ฐธ์กฐ
https://www.inflearn.com/course/ORM-JPA-Basic