Hibernate は、Java アプリケーションとリレーショナル データベース間のデータ アクセスを簡素化する優れた ORM フレームワークです。 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 の多対多
Hibernate の多対多の関係は、複数のエンティティ クラス間の相関関係を表します。たとえば、1 人の学生が複数のコースを受講したり、1 つのコースを複数の学生が受講したりできます。 Hibernate で多対多の関係を実装するには、エンティティ クラスでコレクション属性を定義して、関連付けられた複数のオブジェクトを格納し、マッピング ファイルで関連付けを構成する必要があります。
name
属性はエンティティ クラスのコレクション属性名に対応し、 タグは、関連付けられたエンティティ クラスを指定するために使用されます。
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 では、カスケード操作を構成することでデータベース操作を簡素化できます。たとえば、以下に示すように、マッピング ファイルの 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 などの値は、それぞれ保存と更新のすべての操作を表します。操作、削除操作、孤立子の削除操作などHibernate のカスケード操作により、コードの量が大幅に簡素化され、開発効率が向上します。
Hibernate の遅延ロードHibernate では、遅延ロードを使用してデータベース アクセスのパフォーマンスを向上させることができます。たとえば、以下に示すように、マッピング ファイルの
lazy
属性を設定して遅延読み込みを実装できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:java;">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 では、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 サイトの他の関連記事を参照してください。