> Java > java지도 시간 > @EmbeddedId와 @IdClass를 사용하여 JPA 및 Hibernate에서 복합 키를 매핑하는 방법은 무엇입니까?

@EmbeddedId와 @IdClass를 사용하여 JPA 및 Hibernate에서 복합 키를 매핑하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-05 03:24:17
원래의
522명이 탐색했습니다.

How to Map Composite Keys in JPA and Hibernate using @EmbeddedId vs. @IdClass?

JPA 및 Hibernate를 사용하여 복합 키 매핑

제공된 코드에서 복합 키는 levelStation 및 confPathID를 구성 요소로 사용하여 시간 테이블에 대해 정의됩니다. JPA 및 Hibernate에서 이 복합 키를 매핑하려면 @EmbeddedId 및 @IdClass라는 두 가지 옵션이 있습니다.

@IdClass 사용

@IdClass 주석을 사용하면 엔터티의 여러 필드를 복합 기본 키를 형성합니다. 이를 위해서는 기본 키를 나타내는 클래스를 정의해야 합니다. 이 경우 TimePK 클래스는 다음과 같이 정의할 수 있습니다.

@IdClass(TimePK.class)
public class Time implements Serializable {
    // ...
}
로그인 후 복사

여기서 TimePK는 인수가 없는 생성자, 기본 키 필드에 대한 getter/setter 및 동등( ) 및 hashCode() 메서드.

@EmbeddedId 사용

@EmbeddedId 주석 포함된 클래스를 엔터티의 기본 키에 매핑합니다. @IdClass와 달리 이 접근 방식은 엔터티 클래스와 기본 키 클래스를 결합합니다. @EmbeddedId를 사용하는 방법은 다음과 같습니다.

@Entity
class Time implements Serializable {
    @EmbeddedId
    private TimePK timePK;
    // ...
}
로그인 후 복사

이 경우 TimePK는 Time 엔터티의 내부 클래스이며 인수가 없는 생성자, 키 필드에 대한 getter/setter 및 같음도 정의해야 합니다. () 및 hashCode() 메소드.

@IdClass와 hashCode()의 차이점 @EmbeddedId

@IdClass와 @EmbeddedId의 주요 차이점은 쿼리 구문에 미치는 영향입니다. @IdClass를 사용하면 엔터티를 통해 기본 키 필드에 직접 액세스하고, @EmbeddedId를 사용하면 포함된 클래스의 getter를 통해 해당 필드에 액세스합니다.

둘 중 하나를 선택할 때 @EmbeddedId는 사실을 전달합니다. 기본 키는 도메인 모델에서 의미 있는 ID를 가지고 있는 반면 @IdClass는 기본 키가 단순히 도메인 모델을 고유하게 식별하는 필드의 조합일 뿐이라고 제안합니다. 엔터티.

참조

  • JPA 1.0 사양:

    • 섹션 2.1.4 "기본 키 및 엔터티 ID"
    • 섹션 9.1.14 "EmbeddedId 주석"
    • 섹션 9.1.15 "IdClass 주석"

위 내용은 @EmbeddedId와 @IdClass를 사용하여 JPA 및 Hibernate에서 복합 키를 매핑하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿