Hibernate - 1対1の例(XMLマッピング)

Hibernate – 1対1の例(XMLマッピング)

1対1の関係は、1つのエンティティが別のエンティティの1つのオカレンスにのみ関連付けられている場合に発生します。

このチュートリアルでは、XMLマッピングファイル(hbm)を介して、Hibernateで1対1のテーブルリレーションシップを操作する方法を示します。

このチュートリアルで使用されるツールとテクノロジー:

  1. Hibernate 3.6.3。最終

  2. MySQL 5.1.15

  3. Maven 3.0.3

  4. Eclipse 3.6

プロジェクト構造

このチュートリアルの最終プロジェクト構造を参照してください。

one to one project structure

プロジェクトの依存関係

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」のテーブルリレーションシップを定義する一般的な方法です。

one to one relationship

STOCKおよびSTOCK_DETAILテーブルスクリプトを取得するには、次の「http://www.example.com/mysql/how-to-define-one-to-one-relationship-in-mysql/[1対1のテーブル関係MySQL]」の記事。

2. Hibernateモデルクラス

上記のテーブルを表すために、Stock.javaStockDetail.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.xmlStockDetail.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.xmlStockDetail.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)