게으른개발자/공부
JPA 외래키를 기본키로 사용하기
goslim56
2021. 11. 22. 16:41
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());
}
}