目次
Hibernate の 1 対多と多対多
Hibernate の 1 対多
<set>
table
cascade
Hibernate の遅延読み込みにより、データベース アクセスのパフォーマンスが大幅に向上し、不必要なデータベース操作が削減されます。
ホームページ Java &#&チュートリアル Java Hibernate における 1 対多および多対多の関係のマッピング方法は何ですか?

Java Hibernate における 1 対多および多対多の関係のマッピング方法は何ですか?

May 27, 2023 pm 05:06 PM
java hibernate

Hibernate の 1 対多と多対多

Hibernate は、Java アプリケーションとリレーショナル データベース間のデータ アクセスを簡素化する優れた ORM フレームワークです。 Hibernate では、1 対多および多対多の関係を使用して複雑なデータ モデルを処理できます。

Hibernate の 1 対多

#Hibernate では、他の複数のエンティティ クラスに対応する 1 つのエンティティ クラスを 1 対多の関係と呼びます。たとえば、1 つの注文は複数の注文アイテム (OrderItem) に対応し、1 人のユーザー (User) は複数の注文 (Order) に対応できます。 Hibernate で 1 対多の関係を実装するには、エンティティ クラスでコレクション属性を定義して、複数の関連オブジェクトを格納し、マッピング ファイルで関連付けを構成する必要があります。

Hibernate の 1 対多構成

エンティティ クラスでは、以下に示すように、複数の関連オブジェクトを格納するためのコレクション属性を定義する必要があります。マッピング ファイルを作成するには、以下に示すように、

タグを使用してコレクションの属性と関係を構成する必要があります。 ## タグ

name 属性はエンティティ クラスのコレクション属性名に対応し、table

属性は関連付けテーブルの名前に対応し、

inverse 属性は関連付け関係をコレクション属性のメンテナンスに引き渡すかどうかを示します。 cascade 属性はカスケード操作を表します。 タグは、関連テーブル、 タグ 関連するエンティティ クラスを指定するために使用されます。 Hibernate の 1 対多の操作Hibernate では、コレクション プロパティを通じて関連オブジェクトにアクセスできます。たとえば、次に示すように、getItems() メソッドを通じて注文のすべての注文品目を取得し、addItem(item)

メソッドを通じて注文に注文品目を追加できます。以下:

public class Order {
    private Long id;
    private Date orderDate;
    private List<OrderItem> items = new ArrayList<OrderItem>();
    // getters and setters
}
ログイン後にコピー

Hibernate の 1 対多の関係は、実際的な問題における多くの複雑なデータ モデルを解決できます。たとえば、電子商取引 Web サイトでは、注文 (Order) に複数の注文アイテム (OrderItem) が含まれる場合があります。また、注文商品には複数の商品情報(Product)が含まれる場合があります。

Hibernate の多対多Hibernate の多対多の関係は、複数のエンティティ クラス間の相関関係を表します。たとえば、1 人の学生が複数のコースを受講したり、1 つのコースを複数の学生が受講したりできます。 Hibernate で多対多の関係を実装するには、エンティティ クラスでコレクション属性を定義して、関連付けられた複数のオブジェクトを格納し、マッピング ファイルで関連付けを構成する必要があります。

Hibernate の多対多構成

エンティティ クラスでは、以下に示すように、複数の関連オブジェクトを格納するためのコレクション属性を定義する必要があります。マッピング ファイルを作成するには、以下に示すように、

タグを使用してコレクションの属性と関係を構成する必要があります。 ## タグ

name

属性はエンティティ クラスのコレクション属性名に対応し、

table

属性は関連付けられたテーブルの名前に対応し、

属性はエンティティ クラスのコレクション属性名に対応します。

タグは、関連付けられたテーブルの外部キーを指定するために使用されます。キー列、

タグは、関連付けられたエンティティ クラスを指定するために使用されます。

Hibernate の多対多操作

Hibernate では、コレクション プロパティを通じて関連オブジェクトにアクセスできます。たとえば、以下に示すように、getCourses() メソッドを通じて学生が受講したすべてのコースを取得し、addCourse(course) メソッドを通じて学生にコースを追加できます。 :

<class name="Order" table="orders">
    <id name="id" column="id">
        <generator class="native"/>
    </id>
    <property name="orderDate" column="order_date"/>
    <set name="items" table="order_items" inverse="true" cascade="all">
        <key column="order_id"/>
        <one-to-many class="OrderItem"/>
    </set>
</class>
ログイン後にコピー
Hibernate の多対多の関係は、実際的な問題において多くの複雑なデータ モデルを解決できます。たとえば、学校では、学生 (Student) が複数のコース (Course) を受講し、1 つのコース (Course) を受講することができます。 ) 複数のコースで使用することもできます。学生の選択です。 Hibernate のカスケード操作

Hibernate では、カスケード操作を構成することでデータベース操作を簡素化できます。たとえば、以下に示すように、マッピング ファイルの

cascade

属性を設定してカスケード操作を実装できます。

Order order = session.get(Order.class, orderId);
List<OrderItem> items = order.getItems();
OrderItem item = new OrderItem();
// set item properties
order.addItem(item);
ログイン後にコピー
その中で、cascade 属性を設定できます。 all

save-update

delete

delete-orphan

などの値は、それぞれ保存と更新のすべての操作を表します。操作、削除操作、孤立子の削除操作などHibernate のカスケード操作により、コードの量が大幅に簡素化され、開発効率が向上します。

Hibernate の遅延ロードHibernate では、遅延ロードを使用してデータベース アクセスのパフォーマンスを向上させることができます。たとえば、以下に示すように、マッピング ファイルの lazy 属性を設定して遅延読み込みを実装できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>public class Student { private Long id; private String name; private List&lt;Course&gt; courses = new ArrayList&lt;Course&gt;(); // getters and setters }</pre><div class="contentsignin">ログイン後にコピー</div></div> その中で、lazy 属性を設定できます。 true または

false

は、それぞれ遅延ロードと即時ロードを有効にすることを意味します。

Hibernate の遅延読み込みにより、データベース アクセスのパフォーマンスが大幅に向上し、不必要なデータベース操作が削減されます。

Hibernate クエリHibernate では、HQL (Hibernate Query Language) を使用してデータベースにクエリを実行できます。 HQL は SQL に似ていますが、テーブルや列の代わりにオブジェクトと属性の概念を使用するオブジェクト指向のクエリ言語です。

たとえば、以下に示すように、HQL を使用して学生が受講したすべてのコースをクエリできます。

String hql = "from Course as c where c.id in (select sc.course.id from StudentCourse as sc where sc.student.id = :studentId)";
Query query = session.createQuery(hql);
query.setParameter("studentId", studentId);
List<Course> courses = query.list();
ログイン後にコピー

Hibernate的查询功能非常强大,可以灵活地满足不同的查询需求。

以上がJava Hibernate における 1 対多および多対多の関係のマッピング方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles