> Java > java지도 시간 > 본문

JPA의 관계: 종속성 없이 엔터티 만들기

Mary-Kate Olsen
풀어 주다: 2024-11-27 03:54:13
원래의
607명이 탐색했습니다.

JPA의 관계: 종속성 없이 엔터티 만들기

백엔드 API를 생성할 때 엔터티 관계를 사용하여 데이터를 구성하는 것이 일반적입니다. 일반적으로 강좌나 튜토리얼에서는 주로 양방향 관계를 봅니다. 하지만 한 엔터티가 다른 엔터티와 독립적으로 존재하도록 하려면 어떻게 해야 할까요? 이 기사에서는 이를 달성하기 위해 JPA/Hibernate와의 단방향 관계를 사용하는 방법을 살펴보겠습니다.

목차

  • 맥락과 문제
  • 엔티티 모델링
  • 데이터 저장 시나리오
    • 논문 일정 없이 학생 생성
    • 논문 일정과 연결되도록 학생 업데이트
  • 학생측 관계관리의 장점
  • 대안: 논문 일정 측면에서 관계 관리
  • 귀하의 요구에 맞는 구성 선택

맥락과 문제:

Student와 ThesisSchedule이라는 두 개의 엔터티가 있다고 가정해 보겠습니다. Student와 ThesisSchedule의 관계는 '다대일'입니다. 즉, 학생은 논문 일정과 연결될 수 있고 각 일정에는 여러 학생이 포함될 수 있습니다.

이 경우 우리의 목표는 먼저 ThesisSchedule을 정의하지 않고도 학생을 생성할 수 있도록 하는 것입니다. 이러한 독립성은 예를 들어 논문 일정을 만들기 전에 데이터베이스에 학생을 추가할 때 유용합니다.

  • 발생한 문제: 양방향 또는 잘못 구성된 관계를 사용하면 ThesisSchedule이 아직 생성되지 않은 경우 주석이 nullable = true인 경우에도 학생 생성이 실패할 수 있습니다. 단방향 관계로 이를 해결하는 방법을 살펴보겠습니다.

엔터티 모델링

Student에서 ThesisSchedule까지의 단방향 "다대일" 관계를 사용하여 Student 및 ThesisSchedule 클래스를 생성하겠습니다.

학생단체 코드:

Relationships in JPA: Creating Entities Without Dependency

ThesisShedule 엔터티 코드:

Relationships in JPA: Creating Entities Without Dependency

여기서는 Student 클래스의 @ManyToOne 주석으로 표시되는 Student에서 ThesisSchedule까지 단방향 관계를 갖습니다. nullable = true를 지정하면 ThesisSchedule과 반드시 ​​연결되지 않고도 학생을 생성할 수 있습니다.

데이터 저장 시나리오

이 설정이 데이터베이스로 어떻게 변환되고 API를 통해 데이터가 저장될 수 있는지 살펴보겠습니다.

ThesisSchedule 없이 학생 생성하기

이 설정을 사용하면 ThesisSchedule을 제공하지 않고도 학생을 생성할 수 있습니다.

학생 생성을 위한 POST 요청(ThesisSchedule 없음):

Relationships in JPA: Creating Entities Without Dependency

이렇게 하면 논문_일정_ID 열에 null 값이 있는 학생 테이블에 새 항목이 생성됩니다.

결과:

Relationships in JPA: Creating Entities Without Dependency

ThesisSchedule과 연결되도록 학생 업데이트

ThesisSchedule이 생성되면 학생 기록을 업데이트하여 이와 연결할 수 있습니다.

논문 일정 작성:

Relationships in JPA: Creating Entities Without Dependency

새롭게 생성된 ThesisSchedule의 ID는 1일 수 있습니다.

ThesisSchedule로 학생 업데이트:

Relationships in JPA: Creating Entities Without Dependency

결과:

Relationships in JPA: Creating Entities Without Dependency

이제 Larose는 새로 생성된 ThesisSchedule과 연결됩니다.

학생 측 관계 관리의 장점:

  • 생성 유연성: ThesisSchedule과 독립적으로 학생을 생성할 수 있어 독립적인 엔터티 생성이 가능합니다.
  • 구조의 단순성: 단방향 관계는 ThesisSchedule이 Student와의 관계를 인식할 필요가 없기 때문에 상호 작용을 단순화합니다.
  • 확장성: 나중에 이 관계를 양방향으로 만들어야 하는 경우 Student 컬렉션을 포함하도록 ThesisSchedule 클래스를 업데이트할 수 있습니다.

대안: ThesisSchedule 측에서 관계 관리

어떤 경우에는 ThesisSchedule 측에서 관계를 관리하는 것이 더 적절할 수도 있습니다. 이 접근 방식은 논문 일정에서 관련 학생을 관리하고 특정 일정에 참여한 학생을 추적하려는 경우에 유용합니다.

엔터티 모델링

이 설정에서 ThesisSchedule은 "일대다" 관계를 나타내는 Student 컬렉션을 보유하는 반면 Student는 ThesisSchedule에 대한 참조를 유지하지 않습니다.

ThesisSchedule 엔터티 코드:

Relationships in JPA: Creating Entities Without Dependency

학생단체 코드:

Relationships in JPA: Creating Entities Without Dependency

이 구성에서 ThesisSchedule에는 @OneToMany 주석을 통해 학생 목록이 포함됩니다. 결과적으로 Student에서 직접 링크를 사용하지 않고도 학생을 ThesisSchedule에 추가하거나 제거할 수 있습니다.

ThesisSchedule 측의 관계 관리의 장점:

  • 데이터 중앙화: 논문 일정과 관련된 학생에 대한 모든 정보가 ThesisSchedule에 집중되어 관련 데이터에 더 쉽게 접근할 수 있습니다.
  • 통제력 향상: ThesisSchedule은 학생을 관리할 수 있어 동일한 일정에 참여하는 학생 그룹 처리를 단순화합니다.

귀하의 필요에 맞는 구성 선택:

결론적으로 학생 측 또는 ThesisSchedule 측에서 관계를 관리할지 여부는 애플리케이션의 특정 요구 사항에 따라 다릅니다.

  • 학생이 관리하는 관계: 논문 일정과 별도로 학생을 생성하고 선택적으로 나중에 학생에게 일정을 연결하려는 경우 이 설정을 사용하세요.
  • ThesisSchedule에 의해 관리되는 관계: 논문 일정이 학생을 관리하여 엔터티 간 관계의 핵심이 되도록 해야 하는 경우 이 옵션이 바람직합니다.

두 구성 모두 유연성을 제공하고 원하는 데이터 관계를 기반으로 잘 구성된 백엔드 API를 허용합니다. 모범 사례를 적용하여 엔터티 관계를 구조화함으로써 애플리케이션의 특정 요구 사항을 충족하도록 데이터베이스를 효과적으로 모델링할 수 있습니다.

단방향 관계는 백엔드 API의 엔터티 간 선택적 종속성을 관리하기 위한 강력한 옵션입니다.

이 솔루션이 다른 개발자가 JPA/Hibernate의 단방향 관계를 더 잘 이해하고 사용하는 데 도움이 되기를 바랍니다.

위 내용은 JPA의 관계: 종속성 없이 엔터티 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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