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 매핑하기
반응형
'프로그래밍 > JPA' 카테고리의 다른 글
[JPA] JPA 날쿼리 사용하기(nativeQuery = true) (0) | 2022.12.29 |
---|---|
[JPA] jpa delete 안됨 (0) | 2022.11.14 |
[JPA] JPA란? (0) | 2022.09.28 |
[JPA] org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property 해결 방법 (0) | 2022.08.24 |
[JPA] Save 후 id 가져오기 (0) | 2022.08.22 |