개발정리

JPA-일대일 매핑 본문

스프링/JPA

JPA-일대일 매핑

coffee. 2023. 9. 1. 13:50
@Data
@Entity
@Table
public class Member {

	@Id  @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long member_id;
	
	@Column(name = "name")
	private String name;
	
	
	@OneToOne
	@JoinColumn(name = "card_id")
	private MemberCard card;
	
	
	public void setMemberCard(MemberCard card) {
		this.card=card;
		card.setMember(this);
	}
	
}

 

@Entity
@Data
@Table(name = "MEMBER_CARD" )
public class MemberCard {

	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long card_id;
	
	@Column(name = "dept_name")
	private String dept;
	
	@OneToOne(mappedBy = "card")
	private Member member;
	

}

일대일 연관매핑도 일대다 매핑과 거의 비슷합니다.

@OneToOne 어노테이션을 사용합니다.

 

DB에 저장된 결과를 보면 다음과 같습니다.

여기서 문제가 일대일 매핑이면 외래키인 card_id를 기본키로 사용해도 되지 않을까요?

그때 사용하는 어노테이션이 @MapsId입니다.

 

@Data
@Entity
@Table
public class Member {

	@Id
	private Long member_id;
	
	@Column(name = "name")
	private String name;
	
	
	@MapsId
	@OneToOne
	@JoinColumn(name = "card_id")
	private MemberCard card;
	
	
	public void setMemberCard(MemberCard card) {
		this.card=card;
		card.setMember(this);
	}
	
}

다음과 같이 Member 클래스에 @MapsId 어노테이션을 붙이면 

member테이블의 컬럼이 하나 줄어들고 외래키인 card_id를 기본키로 사용하게 됩니다.

 

참조:JPA 퀵스타트

'스프링 > JPA' 카테고리의 다른 글

JPA-다대다 매핑  (0) 2023.09.02
JPA-다대일 연관관계 매핑  (0) 2023.08.31
JPA-영속 컨텍스트  (0) 2023.08.30
JPA-설정  (0) 2023.08.29