ホームページ  >  記事  >  Java  >  Java Hibernate における 1 対多および多対多の関係のマッピング方法は何ですか?

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

王林
王林転載
2023-05-27 17:06:18957ブラウズ

Hibernate の 1 対多と多対多

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

Hibernate の 1 対多

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

Hibernate の 1 対多構成

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

ace372f96ca3ec664acb3aaa2421b04c

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

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

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

inverse 属性は関連付け関係をコレクション属性のメンテナンスに引き渡すかどうかを示します。 cascade 属性はカスケード操作を表します。 42538adbdb6240b2b083a000a615d5bd タグは、関連テーブル、f7850c684431509b294b210c6237726e タグ 関連するエンティティ クラスを指定するために使用されます。 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 の多対多構成

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

ace372f96ca3ec664acb3aaa2421b04c

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

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 属性を設定して遅延読み込みを実装できます。 <pre class="brush:java;">public class Student { private Long id; private String name; private List&lt;Course&gt; courses = new ArrayList&lt;Course&gt;(); // getters and setters }</pre> その中で、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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。