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());
}
}
테스트 결과
'게으른개발자 > 공부' 카테고리의 다른 글
JPA 외래키로 복합키 만들기 (0) | 2021.11.22 |
---|---|
@Query Annotation 사용시 null 매개변수 무시하는 방법 (0) | 2021.11.22 |
트랜잭션 (0) | 2021.04.17 |
Fluentd로 Kafka 전송하기 설정파일 및 SSL 적용 (0) | 2021.03.14 |
Spring Boot 의존관계 주입방법 (0) | 2021.03.01 |