์ฐ๊ด๊ด๊ณ
๊ฐ์ฒด๋ฅผ ํ ์ด๋ธ์ ๋ง์ถ์ด ๋ชจ๋ธ๋งํ๋ ๊ฒฝ์ฐ( ์ฐธ์กฐ ๋์ ์ธ๋ ํค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ ) : ๋ฐ์ดํฐ ์งํฅ ๋ฐฉ์
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
private int age;
@Column(name = "TEAM_ID")
private Long teamId;
…
}
@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
…
}
// Main
//ํ ์ ์ฅ
Team team = new Team();
team.setName("TeamA");
em.persist(team);
// ๊ฐ์ฒด ์์ฑ, ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ ์ ์ฅ ํ ์ํฐํฐ๋งค๋์ ์ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
//ํ์ ์ ์ฅ
Member member = new Member();
member.setName("member1");
member.setTeamId(team.getId());
em.persist(member);
// ๊ฐ์ฒด ์์ฑํ ์ธ์คํด์ค๋ฅผ setter๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ ๊ฐ์ ธ์จ๋ค ์ํฐํฐ๋งค๋์ ์ ์ ์ฅ
// => ์ฐ๊ด๊ด๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์กฐํํด์ผ ํ๋ค
//์กฐํ
Member findMember = em.find(Member.class, member.getId());
// ๋ชจ๋ ์์
์ ์ํฐํฐ๋งค๋์ ๊ฐ ์ํํ๋ค
//์ฐ๊ด๊ด๊ณ๊ฐ ์์
Team findTeam = em.find(Team.class, team.getId());
// ํ๋ ฅ๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์๋ ๋ฐ์ดํฐ ์งํฅ๋ฐฉ์ ~ ๋งค ๋ฒ ๋ฐ์์ ์ธ๋ ํค๋ฅผ ์ฌ์ฉํด์ ์ฐพ์์ผ ํ๋ค
๋จ๋ฐฉํฅ ๋งคํ
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
private int age;
// @Column(name = "TEAM_ID")
// private Long teamId; ~ ์ธ๋ ํค ๋ฐฉ์์ด ์๋,
@ManyToOne // ๊ธฐ๋ณธ ๊ฐ Member, Team์ ๊ฐ์ด ๊ฐ์ ธ์ค๋๋ฐ, fetchType.LAZY ์ค์ ์ฌ์ฉํ ๋ ๊ฐ์ ธ์ด
// ์ง์ฐ๋ก๋ฉ
@JoinColumn(name = "TEAM_ID")
private Team team; // ~ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ Team ํด๋์ค๋ฅผ ์ฐธ์กฐ
}
// main
// ํ ์ ์ฅ
Team team = new Team();
team.setName("TeamA");
em.persist(team);
// ํ์ ์ ์ฅ
Member member = new Member();
member.setName("member1");
member.setTeam(team); // ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ค์ , ์ฐธ์กฐ ์ ์ฅ
em.persist(member);
// ์กฐํ
Member findMember = em.find(Member.class, member.getId());
// ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ด๊ด๊ณ ์กฐํ
Team findTeam = findMember.getTeam();
-> DB์์๋ ๋ฐ์ดํฐ ์งํฅ ๋ฐฉ์์ด๋ ์ฐ๊ด๊ด๊ณ ๋งคํ ๋ฐฉ์์ด๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค.
** ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ : ๊ฐ์ฒด ๊ฐ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ค์ ํ ๊ฒ -> Member ์ํฐํฐ ์์์ Team ์ํฐํฐ๋ฅผ ์ฐธ์กฐํ๋ ๊ฐ์ฒด team๊ณผ DB์ Member ํ ์ด๋ธ์ FK์ธ Team_ID๋ฅผ ๋งคํํ์ฌ PK๋ฅผ ํตํด Team ๊ฐ์ ์ ๊ทผ ๋ฐ ์์ ์ ์ํํ ์ ์๋ค.
์๋ฐฉํฅ ๋งคํ
@OneToMany(mappedBy = "team") // ๊ด๊ณ์ ์ฃผ์ธ์ Member๋ค
List<Member> members = new ArrayList<Member>(); // Team ์ํฐํฐ์์ Member ์ํฐํฐ ์ฐธ์กฐ
// main
// ์กฐํ
Team findTeam = em.find(Team.class, team.getId());
int memberSize = findTeam.getMembers().size(); // ์ญ๋ฐฉํฅ ์กฐํ
๋ ์ํฐํฐ ์ค ํ๋์ ์ํฐํฐ๊ฐ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ค
๊ด๊ณ์ ์ฃผ์ธ
- ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ๋ง์ด ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌ(๋ฑ๋ก, ์์ )
- ์ฃผ์ธ์ด ์๋ ์ชฝ์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ
- HOW?
์ฃผ์ธ์ด ์๋ ์ชฝ์ ๊ฐ์ฒด์ ํ๋์, ๊ด๊ณ์ ๋์์ ์ฐธ์กฐํ๋ ํ๋์ mappedBy ์์ฑ์ ๋ถ์ฌํ์ฌ ๊ทธ ๋์์ ์ฃผ์ธ์ผ๋ก ํ๋ค.
- Who is Owner?(๊ถ์ฅ)
์ธ๋ ํค์ ์ฐ๊ด๊ด๊ณ๋ก ๋งคํ๋์ด ์๋ ์ํฐํฐ๊ฐ ์ฃผ์ธ์ด๋ค.
์ค๊ณ๋ ๋จ๋ฐฉํฅ์ผ๋ก๋ง ๊ฐ๋ฅํด๋ ์ถฉ๋ถํ๋ค. ์๋ฐฉํฅ์ ์ฐธ์กฐ ๊ฐ ์กฐํ๋ฅผ ์กฐ๊ธ ๋ ํธํ๊ฒ ํ๋ ค๊ณ ํ๋ ๊ฒ์ผ ๋ฟ.
~ํ์ : ๋จ๋ฐฉํฅ / ๋ถ๊ฐ : ์๋ฐฉํฅ
์๋ฐฉํฅ ๋งคํ์ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ๊ฐ์ ์ ๋ ฅํด์ผ ํ๋ค. (์์ํ ๊ฐ์ฒด ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ๋ฉด ํญ์ ์์ชฝ๋ค ๊ฐ์ ์ ๋ ฅํด์ผ ํ๋ค.)
// main
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setName("member1");
// ์ฃผ์ธ์ ๋ฐ๋ํธ์ ์ฐ๊ด๊ด๊ณ ์ค์
team.getMembers().add(member);
// ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ๊ฐ ์ค์
member.setTeam(team); //**
em.persist(member);
์ฐ๊ด๊ด๊ณ ๋งคํ ์ด๋ ธํ ์ด์ +
๋ค๋์ผ
์ผ๋๋ค
์ผ๋์ผ
๋ค๋๋ค
@JoinColumn : ์ธ๋ ํค ๋งคํ ์ ์ฌ์ฉ
@JoinTable
์์๊ด๊ณ ์ด๋ ธํ ์ด์
@Inheritance
@DiscriminatorColumn
@DIscriminatorValue
@MappedSuperclass
๋ณตํฉํค ์ด๋ ธํ ์ด์
@IdClass
@EnbeddedId
@Embeddable
@Mapsld
'Spring๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์๋ จ : Project MySelectShop (3) (0) | 2022.12.15 |
---|---|
์คํ๋ง ์๋ จ : Project MySelectShop (2) (0) | 2022.12.15 |
์คํ๋ง ์๋ จ : Project MySelectShop (1) (0) | 2022.12.13 |
T ์์นด๋ฐ๋ฏธ : JPA ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด (1) (0) | 2022.12.13 |
JPA : ORM ์ด์ ๊น์ง ํ๋ฆ (0) | 2022.12.05 |