MappedBy는 JPA(Java Persistence API) 및 객체 관계형 매핑을 위한 Hibernate에서 양방향 관계를 관리하는 데 중요한 역할을 합니다. 이는 데이터베이스 컨텍스트에서 복잡한 관계를 모델링하고 탐색하는 실용적인 방법입니다.
Airline이 많은 AirlineFlight를 소유하고 많은 AirlineFlight가 하나의 항공사에 속하는 특정 예에서 , mappedBy는 반복적인 정보 저장을 피하기 위해 사용됩니다. AirlineFlights를 소유 클래스로 지정하려면 Airline 클래스에 mappedBy 속성을 지정합니다.
<code class="java">@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL}) @JoinColumn(name="IDAIRLINE") public Set<AirlineFlight> getAirlineFlights() { return airlineFlights; }</code>
@OneToMany 주석의 mappedBy 매개 변수는 AirlineFlights 테이블의 IDAIRLINE 열이 외래 키임을 지정합니다. 이는 Airline 테이블의 기본 키에 다시 매핑됩니다. 이렇게 하면 Airline 개체를 쿼리할 때 연결된 AirlineFlights도 쉽게 가져올 수 있습니다.
MappedBy는 다음과 같은 몇 가지 중요한 목적을 제공합니다.
귀하의 예에서 AirplaneFlights 테이블에는 Airline 테이블을 가리키는 외래 키로 IDAIRLINE 열이 있지만 Airline 테이블에는 해당 IDAIRLINEFLIGHTS 열이 없습니다. 이 설정은 항공사를 소유자로 지정해야 하는 경우에도 AirlineFlights가 소유 엔터티임을 암시합니다.
이 문제를 해결하려면 이에 따라 주석을 조정해야 합니다. AirlineFlights의 @OneToMany 주석은 AirlineFlight 클래스로 이동해야 하며 mappedBy 속성은 Airline 클래스의 "소유" 필드를 참조해야 합니다.
<code class="java">@ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="IDAIRLINE", nullable=false) @MapsId public Airline getAirline() { return airline; }</code>
mappedBy 및 @MapsId를 지정하면 Airline의 기본 키(AirlineFlights의 IDAIRLINE 외래 키가 아님)는 관계를 정의하는 데 사용됩니다. 이렇게 하면 항공사가 소유 엔터티가 되어 필요에 따라 적극적으로 또는 느리게 가져올 수 있습니다.
위 내용은 JPA 및 Hibernate의 `MappedBy`는 어떻게 양방향 관계를 관리하고 데이터베이스 스키마 단순성을 향상시키는 데 도움이 됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!