>Java >java지도 시간 >JPA 및 Hibernate의 `MappedBy`는 어떻게 양방향 관계를 관리하고 데이터베이스 스키마 단순성을 향상시키는 데 도움이 됩니까?

JPA 및 Hibernate의 `MappedBy`는 어떻게 양방향 관계를 관리하고 데이터베이스 스키마 단순성을 향상시키는 데 도움이 됩니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-03 13:01:30929검색

How does `MappedBy` in JPA and Hibernate help manage bidirectional relationships and improve database schema simplicity?

JPA 및 Hibernate의 MappedBy 이해

MappedBy는 JPA(Java Persistence API) 및 객체 관계형 매핑을 위한 Hibernate에서 양방향 관계를 관리하는 데 중요한 역할을 합니다. 이는 데이터베이스 컨텍스트에서 복잡한 관계를 모델링하고 탐색하는 실용적인 방법입니다.

MappedBy의 권장 사용

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의 목적

MappedBy는 다음과 같은 몇 가지 중요한 목적을 제공합니다.

  • SQL 조인 정보 중복 방지: mappedBy가 없으면 Airline과 AirlineFlights 간의 조인에는 AirlineFlights 테이블의 IDAIRLINE 기본 키와 외래 키가 모두 포함됩니다. 이로 인해 데이터 중복 및 성능 문제가 발생할 수 있습니다.
  • 데이터베이스 스키마 단순성 향상: mappedBy를 사용하면 하나의 테이블에만 외래 키가 포함되도록 보장하여 더 단순하고 정규화된 데이터베이스를 만들 수 있습니다. schema.
  • 양방향 탐색 지원: 명시적인 조인 쿼리를 작성하지 않고도 관계를 양방향(항공사에서 AirlineFlights로 또는 그 반대로)으로 탐색할 수 있습니다.

특정 시나리오

귀하의 예에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.