본문 바로가기

게으른개발자/공부

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

JPA 를 사용할때 , 아래의 예제 처럼 외래키를 기본키로 설정하는 방법 -> @MapsId 활용 (매핑한 연관관계를 기본 키에도 매핑하겠다는 뜻)

 

 

 

예제.  Member 테이블과  Member 의 id를 외래키이자  기본키로 갖는 Vip 테이블

JPA Entity 구성 


 

//Member 엔티티
@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Member {
  @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(nullable = false)
  private String name;
}

//Vip 엔티티
@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 이나 @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());
  }
}

 

 

 

 

테스트 결과