Server๐Ÿงค/JPA

[JPA] ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ (๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘)

yujindonut 2023. 2. 3. 12:43
728x90

 

๊ฐ์ฒด ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•„๋ž˜์˜ ๊ฐ์ฒด์ฐธ์กฐ์™€ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ํ‚ค๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ• ํ•™์Šต

 

 

๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘

 

๊ฐ์ฒด๋ฅผ ํ…Œ์ด๋ธ”์— ๋งž์ถ”์–ด ๋ชจ๋ธ๋ง ํ•˜๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.

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

 

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ

www.inflearn.com

 

728x90