Hibernate - пример «один к одному» (сопоставление XML)

Hibernate - пример «один к одному» (сопоставление XML)

Отношения один-к-одному возникают, когда один объект связан точно с одним вхождением другого объекта.

В этом руководстве мы покажем вам, как работать с табличными отношениями «один к одному» в Hibernate, с помощью файла сопоставления XML (hbm).

Инструменты и технологии, используемые в этих уроках:

  1. Hibernate 3.6.3.Final

  2. MySQL 5.1.15

  3. Maven 3.0.3

  4. Затмение 3.6

Структура проекта

Смотрите окончательную структуру проекта этого урока.

one to one project structure

Зависимость проекта

Получитеhibernate.jar из репозитория JBoss, 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. Таблица «один-к-одному»

При разработке таблицы отношенийone-to-one таблица STOCK содержит ровно одну запись в таблице STOCK_DETAIL. Обе таблицы имеют одинаковый Stock_Id в качестве первичного ключа. В таблице STOCK_DETAIL Stock_Id является первичным ключом, а также внешним ключом таблицы STOCK. Это распространенный способ определения табличных отношений «один к одному».

one to one relationship

Чтобы получить сценарий таблицы STOCK и STOCK_DETAIL, обратитесь к следующему «http://www.example.com/mysql/how-to-define-one-to-one-relationship-in-mysql/[одно к одной связи таблицы в MySQL] ».

2. Спящий модельный класс

Создайте два класса модели -Stock.java иStockDetail.java, чтобы представить приведенные выше таблицы.

Файл: 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 Mapping

Теперь создайте два файла отображения 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. С ограниченным = «истина», он гарантирует, что запас должен существовать.

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 см. этотexample

Скачать -Hibernate-one-to-one-xml-mapping.zip (10 КБ)