SpringBoot

JPA 외래키를 기본키로 사용하기

똑똑한망치 2024. 3. 27. 16:33
728x90
반응형

 

 

🎈 JPA를 사용할 때, 위의 그림처럼 외래키를 기본키로 설정하는 방법

@MapsId 활용 -> 매핑한 연관관게를 기본키에도 매핑하겠다는 뜻이다.

 

 

간단한 예제를 통해 살펴보자.

 

예제 사진

 

Member 테이블과 Memeber의 id를 외래키이자 기본키로 가지는 Vip 테이블이 있다.

 

// Member Entity
@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable = false)
    private String name;
}

 

 

// Vip Entity

@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Vip {
    @Id
    @Column(name = "member_id", nullable = false)
    private Long id;
    
    @OneToOne(fetch = FetchType.EAGER)
    @MapsId // @MapsId 는 @Id로 지정된 컬럼에 @OneToOne or @ManyToOne관계를 매핑시키는 역할
    @JoinColumn(name = "member_id")
    private Member member;
    
    @Column(nullable = false)
    @ColumnDefault("10")
    private Integer discount;
}

 

//테스트코드
@SpringBootTest
class VipServiceTest {

  @Autowired
  private MemberService memberService;

  @Autowired
  private VipService vipService;


  @Test
  @Transactional
  @Rollback(false)
  void When_NewVipData_Expect_VipIdSameMemberId() throws Exception {
    Member member = Member.builder().name("회원1").build();
    Vip vip = Vip.builder().member(member)
        .discount(10).build();

    vipService.save(vip);
    Assertions.assertThat(vip.getId()).isEqualTo(member.getId());
  }
}

 

 

테스트 결과

반응형