バックエンド API を作成するときは、エンティティ関係を操作してデータを整理するのが一般的です。通常、コースやチュートリアルでは、主に双方向の関係が見られます。しかし、一方のエンティティを他方から独立して存在させたい場合はどうすればよいでしょうか?この記事では、JPA/Hibernate との一方向の関係を使用してこれを実現する方法を検討します。
Student と ThesisSchedule という 2 つのエンティティがあると想像してください。 Student と ThesisSchedule の関係は「多対 1」です。これは、学生を論文スケジュールに関連付けることができ、各スケジュールに複数の学生を含めることができることを意味します。
この場合、私たちの目標は、最初に ThesisSchedule を定義する必要なしに Student を作成できるようにすることです。この独立性は、たとえば、論文スケジュールを作成する前に学生をデータベースに追加する場合に役立ちます。
Student から ThesisSchedule への一方向の「多対 1」関係を使用して Student クラスと ThesisSchedule クラスを作成します。
学生エンティティコード:
ThesisShedule エンティティ コード:
ここでは、Student から ThesisSchedule への一方向の関係があり、Student クラスの @ManyToOne 注釈によって示されています。 nullable = true を指定すると、必ずしも ThesisSchedule に関連付けられなくても Student を作成できるようになります。
この設定がデータベースにどのように変換され、API を介してデータがどのように保存されるかを見てみましょう。
この設定を使用すると、ThesisSchedule を提供せずに学生を作成できます。
学生を作成するための POST リクエスト (ThesisSchedule なし):
これにより、thesis_schedule_id 列に NULL 値を持つ新しいエントリが Student テーブルに作成されます。
結果:
ThesisSchedule が作成されたら、それに関連付ける Student レコードを更新できます。
論文スケジュールの作成:
この新しく作成された ThesisSchedule の ID は 1 である可能性があります。
ThesisSchedule で学生を更新しています:
結果:
これで、Larose は新しく作成された ThesisSchedule に関連付けられました。
場合によっては、ThesisSchedule 側から関係を管理する方が適切な場合があります。このアプローチは、論文スケジュールで関連する学生を管理し、特定のスケジュールに参加している学生を追跡したい場合に便利です。
この設定では、ThesisSchedule は「1 対多」の関係を表す Student のコレクションを保持しますが、Student は ThesisSchedule への参照を維持しません。
ThesisSchedule エンティティ コード:
学生エンティティコード:
この構成では、ThesisSchedule に @OneToMany アノテーションを介して Student のリストが含まれています。したがって、Student に直接リンクを必要とせずに、学生を ThesisSchedule に追加または削除できます。
結論として、Student 側と ThesisSchedule 側のどちらで関係を管理するかは、アプリケーションの特定のニーズによって異なります。
どちらの構成でも柔軟性があり、必要なデータ関係に基づいて適切に編成されたバックエンド API が可能になります。ベスト プラクティスを適用してエンティティの関係を構造化すると、アプリケーション固有のニーズを満たすようにデータベースを効果的にモデル化できます。
一方向の関係は、バックエンド API のエンティティ間のオプションの依存関係を管理するための強力なオプションです。
このソリューションが、他の開発者が JPA/Hibernate の一方向リレーションシップをよりよく理解し、使用できるようになれば幸いです。
以上がJPA のリレーションシップ: 依存関係のないエンティティの作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。