Java Hibernate における 1 対多および多対多の関係のマッピング方法は何ですか?
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)が含まれる場合があります。 public class Order { private Long id; private Date orderDate; private List<OrderItem> items = new ArrayList<OrderItem>(); // getters and setters }
Hibernate の多対多
Hibernate の多対多の関係は、複数のエンティティ クラス間の相関関係を表します。たとえば、1 人の学生が複数のコースを受講したり、1 つのコースを複数の学生が受講したりできます。 Hibernate で多対多の関係を実装するには、エンティティ クラスでコレクション属性を定義して、関連付けられた複数のオブジェクトを格納し、マッピング ファイルで関連付けを構成する必要があります。
name
属性はエンティティ クラスのコレクション属性名に対応し、table
属性は関連付けられたテーブルの名前に対応し、 タグは、関連付けられたエンティティ クラスを指定するために使用されます。
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<Course> courses = new ArrayList<Course>();
// getters and setters
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
その中で、lazy
属性を設定できます。 true
または
は、それぞれ遅延ロードと即時ロードを有効にすることを意味します。
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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