제공된 코드에서 복합 키는 levelStation 및 confPathID를 구성 요소로 사용하여 시간 테이블에 대해 정의됩니다. JPA 및 Hibernate에서 이 복합 키를 매핑하려면 @EmbeddedId 및 @IdClass라는 두 가지 옵션이 있습니다.
@IdClass 주석을 사용하면 엔터티의 여러 필드를 복합 기본 키를 형성합니다. 이를 위해서는 기본 키를 나타내는 클래스를 정의해야 합니다. 이 경우 TimePK 클래스는 다음과 같이 정의할 수 있습니다.
@IdClass(TimePK.class) public class Time implements Serializable { // ... }
여기서 TimePK는 인수가 없는 생성자, 기본 키 필드에 대한 getter/setter 및 동등( ) 및 hashCode() 메서드.
@EmbeddedId 주석 포함된 클래스를 엔터티의 기본 키에 매핑합니다. @IdClass와 달리 이 접근 방식은 엔터티 클래스와 기본 키 클래스를 결합합니다. @EmbeddedId를 사용하는 방법은 다음과 같습니다.
@Entity class Time implements Serializable { @EmbeddedId private TimePK timePK; // ... }
이 경우 TimePK는 Time 엔터티의 내부 클래스이며 인수가 없는 생성자, 키 필드에 대한 getter/setter 및 같음도 정의해야 합니다. () 및 hashCode() 메소드.
@IdClass와 @EmbeddedId의 주요 차이점은 쿼리 구문에 미치는 영향입니다. @IdClass를 사용하면 엔터티를 통해 기본 키 필드에 직접 액세스하고, @EmbeddedId를 사용하면 포함된 클래스의 getter를 통해 해당 필드에 액세스합니다.
둘 중 하나를 선택할 때 @EmbeddedId는 사실을 전달합니다. 기본 키는 도메인 모델에서 의미 있는 ID를 가지고 있는 반면 @IdClass는 기본 키가 단순히 도메인 모델을 고유하게 식별하는 필드의 조합일 뿐이라고 제안합니다. 엔터티.
JPA 1.0 사양:
위 내용은 @EmbeddedId와 @IdClass를 사용하여 JPA 및 Hibernate에서 복합 키를 매핑하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!