728x90
반응형

@IdClass를 사용하여 복합 키 매핑하기

 

JPA는 영속성 컨텍스트에 엔티티를 보관 시, 식별자를 사용하고 이를 구분하기 위해 equals와 hashcode를 사용해 비교함.이때 식별자가 2개 이상이면 별도의 식별자 클래스를 만들고 그곳에 equals와 hashcode를 구현해야 함.

 

@IdClass 방식과 @EmbeddedId 방식 중 @IdClass 방식 예제를 살펴보자

 

1️⃣ Id Class 생성하기DiaryId.java 파일 👇

@AllArgsConstructor
@NoArgsConstructor
public class DiaryId implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private int diaryId;
	private int userId;
	
	@Override
	public int hashCode() {
		return Objects.hash(diaryId, userId);
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		DiaryId other = (DiaryId) obj;
		return diaryId == other.diaryId && userId == other.userId;
	}
}

hashCode와 equals를 구현해야 함

Serializable 인터페이스를 구현해야 함

 

2️⃣ Entity에 idClass 가져와서 복합키 매핑하기DiaryEntity.java 파일 👇

@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="DIARY")
@IdClass(DiaryId.class)
public class DiaryEntity {

	@Id
	@Column(name="DIARY_ID")
	int diaryId;
	@Id
	@Column(name="USER_ID")
	int userId;
	@Column(name="TITLE")
	String title;
	@Column(name="CONTENT")
	String content;
    
}

@IdClass 매핑하기

반응형
복사했습니다!