@Embeddable & @EmbeddedId
- 복합 키를 위한 클래스를
@Embeddable
어노테이션을 사용하여 생
@Embeddable
@Data
public class MyCompositeKey implements Serializable {
private String name;
private String email;
}
- 복합키를 위한 클래스 MyCompositeKey
Serializable
인터페이스를 구현해야함.
// 기본 생성자, getter, setter, equals, hashCode 구현해야함
@Entity
@Getter
class MyEntity {
@EmbeddedId
private MyCompositeKey myCompositeKey;
}
- @EmbeddedId 를 선언한 식별자 클래스는
- 기본 키를 직접 name 와 email 의 복합키로 할당합니다.
- 또한
의 구조로 테이블이 생성됩니다.
@IdClass
@AllArgsConstructor
@EqualsAndHashCode
public class MyCompositeKey implements Serializable {
private String name;
private String email;
}
@Entity
@Getter
@IdClass(MyCompositeKey.class)
class MyEntity {
@Id
private String name;
@Id
private String email;
}
- 관계형 DB 스러운 모습으로 바뀐다.
왜 복합키는 equals + hashcode 를 구현해야하는가?
- 엔티티 간의 비교를 수행하는 경우
- equals 와 hashcode 를 통해 객체간의 비교를 하게 된다.
- 만약 올바르게 해당 equals .. 등을 선언하지 않았더라면,
- 두 객체가 같다고 생각할수없을 것임
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] EntityManager 에서 flush 의 역할 (0) | 2023.11.04 |
---|---|
[JPA]영속성 전이 :저장 (0) | 2023.11.04 |
[JPA] 즉시 로딩과 조인 전략 (0) | 2023.11.04 |
[JPA] 프록시 객체의 초기화 (0) | 2023.11.04 |
[JPA] 영속성 컨텍스트, 프록시 객체, 준영속 상태 (0) | 2023.11.04 |