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());
}
}
테스트 결과
반응형
'SpringBoot' 카테고리의 다른 글
JWT (0) | 2024.03.30 |
---|---|
회원가입 시 입력받은 이메일로 인증링크 전송 (0) | 2024.03.27 |
개인 프로젝트 - 회원가입 시 이메일 인증 (0) | 2024.03.20 |
서비스의 인증과 권한 부여 (1) | 2024.03.17 |
타임리프 (Thymeleaf) (0) | 2024.03.15 |