Hibernate – 1対1の例(XMLマッピング)
1対1の関係は、1つのエンティティが別のエンティティの1つのオカレンスにのみ関連付けられている場合に発生します。
このチュートリアルでは、XMLマッピングファイル(hbm)を介して、Hibernateで1対1のテーブルリレーションシップを操作する方法を示します。
このチュートリアルで使用されるツールとテクノロジー:
-
Hibernate 3.6.3。最終
-
MySQL 5.1.15
-
Maven 3.0.3
-
Eclipse 3.6
プロジェクト構造
このチュートリアルの最終プロジェクト構造を参照してください。
プロジェクトの依存関係
JBossリポジトリからhibernate.jarを取得すると、Mavenが関連するすべての依存関係を処理します。
ファイル:pom.xml
JBoss repository http://repository.jboss.org/nexus/content/groups/public/ mysql mysql-connector-java 5.1.15 org.hibernate hibernate-core 3.6.3.Final javassist javassist 3.12.1.GA
1. 「1対1」のテーブルリレーションシップ
one-to-one関係テーブルの設計であるSTOCKテーブルには、STOCK_DETAILテーブルに1つのレコードが含まれています。 両方のテーブルには、プライマリキーとして同じStock_Idがあります。 STOCK_DETAILテーブルでは、Stock_Idはプライマリキーであり、STOCKテーブルへの外部キーでもあります。 これは、「1対1」のテーブルリレーションシップを定義する一般的な方法です。
STOCKおよびSTOCK_DETAILテーブルスクリプトを取得するには、次の「http://www.example.com/mysql/how-to-define-one-to-one-relationship-in-mysql/[1対1のテーブル関係MySQL]」の記事。
2. Hibernateモデルクラス
上記のテーブルを表すために、Stock.java
とStockDetail.java
の2つのモデルクラスを作成します。
ファイル:Stock.java
package com.example.stock; public class Stock implements java.io.Serializable { private Integer stockId; private String stockCode; private String stockName; private StockDetail stockDetail; //constructor & getter and setter methods }
ファイル:StockDetail.java
package com.example.stock; public class StockDetail implements java.io.Serializable { private Integer stockId; private Stock stock; private String compName; private String compDesc; private String remark; private Date listedDate; //constructor & getter and setter methods }
3. Hibernate XMLマッピング
次に、2つのHibernateマッピングファイル(hbm)–Stock.hbm.xml
とStockDetail.hbm.xml
を作成します。
ファイル:Stock.hbm.xml
ファイル:StockDetail.hbm.xml
stock
Note
このone-to-one関係の主な問題は、両方に同じ主キーが割り当てられていることを確認することです。 StockDetail.hbm.xmlでは、特別なforeign identifier generatorが宣言されており、STOCKテーブルから主キー値を取得することがわかります。 constrained =” true”の場合、ストックが存在する必要があります。
4. Hibernate設定ファイル
Stock.hbm.xml
とStockDetail.hbm.xml
をHibernate構成ファイルに入れ、MySQL接続の詳細も入れます。
_
ファイル:hibernate.cfg.xml_
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/exampledb root password org.hibernate.dialect.MySQLDialect true
5. それを実行します
実行すると、HibernateはSTOCKテーブルに行を挿入し、STOCK_DETAILテーブルに行を挿入します。
ファイル:App.java
package com.example; import java.util.Date; import org.hibernate.Session; import com.example.stock.Stock; import com.example.stock.StockDetail; import com.example.util.HibernateUtil; public class App { public static void main(String[] args) { System.out.println("Hibernate one to one (XML mapping)"); Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); Stock stock = new Stock(); stock.setStockCode("4715"); stock.setStockName("GENM"); StockDetail stockDetail = new StockDetail(); stockDetail.setCompName("GENTING Malaysia"); stockDetail.setCompDesc("Best resort in the world"); stockDetail.setRemark("Nothing Special"); stockDetail.setListedDate(new Date()); stock.setStockDetail(stockDetail); stockDetail.setStock(stock); session.save(stock); session.getTransaction().commit(); System.out.println("Done"); } }
出力
Hibernate one to one (XML mapping) Hibernate: insert into exampledb.stock (STOCK_CODE, STOCK_NAME) values (?, ?) Hibernate: insert into exampledb.stock_detail (COMP_NAME, COMP_DESC, REMARK, LISTED_DATE, STOCK_ID) values (?, ?, ?, ?, ?) Done
Hibernate Annotation
Hibernateアノテーションの1対1については、このexampleを参照してください。
ダウンロード–Hibernate-one-to-one-xml-mapping.zip(10KB)