반응형
JPA에서 복합 키를 사용하려면 @Embeddable 이나 @IdClass 애너테이션을 사용해서 구현할 수 있다.
1. 공통점
- Serializable 인터페이스 구현: 복합 키 클래스는
Serializable
인터페이스를 구현해야 한다. - 기본 생성자: 복합 키 클래스에는 기본 생성자가 필요하다.
hashCode
와equals
구현: 복합 키의 동등성을 정확히 비교하기 위해hashCode
와equals
메소드를 오버라이드 해야 한다.
2. Embedded ID 사용하기
@Embedded를 적용한 복합 키 클래스를 정의한다. 이때, Serializable 인터페이스를 구현해야 한다.
@Embeddable
public class MyCompositeKey implements Serializable {
private String keyPart1;
private String keyPart2;
// 기본 생성자, getters, setters, hashCode, equals 구현
}
엔티티 클래스에서 복합 키 클래스를 필드로 갖는다.
@Entity
public class MyEntity {
@EmbeddedId
private MyCompositeKey id;
// 나머지 필드, getters, setters
}
3. ID Class 사용하기
복합 키를 나타내는 필드를 엔티티 내에 직접 정의하고, 복합 키 클래스는 키 필드의 복사본을 유지하는 방식이다.
public class MyCompositeKeyId implements Serializable {
private String keyPart1;
private String keyPart2;
// 기본 생성자, getters, setters, hashCode, equals 구현
}
@Entity
@IdClass(MyCompositeKeyId.class)
public class MyEntity {
@Id
private String keyPart1;
@Id
private String keyPart2;
// 나머지 필드, getters, setters
}
정리
복합 키를 적용했을 때의 장단점과 단일 키를 대표 키로 사용했을 때의 장단점을 비교해서 상황에 맞게 설계하자. @EmbeddedId를 사용하는 것이 더 객체지향적이며 key 필드의 이름이 변경될 경우 상대적으로 관리가 쉽다.
반응형
'Tool > Java' 카테고리의 다른 글
[JPA] MultipleBagFetchException 이해하기 (1) | 2024.01.04 |
---|---|
[Java] 리플렉션 API 간단 정리 (0) | 2023.10.23 |
[Java] CUI 키오스크 (내일배움캠프 과제) (0) | 2023.10.20 |
[Java] Stream API 기초 정리 (0) | 2022.12.09 |