Рубрики
Без рубрики

Пример гибернации –Один ко многим” (сопоставление XML)

– Гибернация – Пример “Один ко многим” (сопоставление XML)

Связь “один ко многим” возникает, когда одна сущность связана со многими вхождениями в другой сущности.

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

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

  1. Спящий режим 3.6.3. Окончательный
  2. MySQL 5.1.15
  3. Maven 3.0.3
  4. Затмение 3.6

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

Структура проекта этого учебника.

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

Получить 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. ” Пример “Один ко многим”

Это дизайн таблицы отношений один ко многим , таблица ЗАПАСОВ имеет много вхождений в таблицу STOCK_DAILY_RECORD.

Смотрите сценарии таблиц MySQL

DROP TABLE IF EXISTS `stock`;
CREATE TABLE `stock` (
  `STOCK_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `STOCK_CODE` varchar(10) NOT NULL,
  `STOCK_NAME` varchar(20) NOT NULL,
  PRIMARY KEY (`STOCK_ID`) USING BTREE,
  UNIQUE KEY `UNI_STOCK_NAME` (`STOCK_NAME`),
  UNIQUE KEY `UNI_STOCK_ID` (`STOCK_CODE`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `mkyongdb`.`stock_daily_record`;
CREATE TABLE  `mkyongdb`.`stock_daily_record` (
  `RECORD_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `PRICE_OPEN` float(6,2) DEFAULT NULL,
  `PRICE_CLOSE` float(6,2) DEFAULT NULL,
  `PRICE_CHANGE` float(6,2) DEFAULT NULL,
  `VOLUME` bigint(20) unsigned DEFAULT NULL,
  `DATE` date NOT NULL,
  `STOCK_ID` int(10) unsigned NOT NULL,
  PRIMARY KEY (`RECORD_ID`) USING BTREE,
  UNIQUE KEY `UNI_STOCK_DAILY_DATE` (`DATE`),
  KEY `FK_STOCK_TRANSACTION_STOCK_ID` (`STOCK_ID`),
  CONSTRAINT `FK_STOCK_TRANSACTION_STOCK_ID` FOREIGN KEY (`STOCK_ID`) 
  REFERENCES `stock` (`STOCK_ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;

2. Класс модели гибернации

Создайте два класса моделей – Stock.java и StockDailyRecord.java , для представления приведенных выше таблиц.

Файл: Stock.java

package com.mkyong.stock;

import java.util.HashSet;
import java.util.Set;

public class Stock implements java.io.Serializable {

	private Integer stockId;
	private String stockCode;
	private String stockName;
	private Set stockDailyRecords = 
				new HashSet(0);

	//getter, setter and constructor
}

Файл: StockDailyRecord.java

package com.mkyong.stock;

import java.util.Date;

public class StockDailyRecord implements java.io.Serializable {

	private Integer recordId;
	private Stock stock;
	private Float priceOpen;
	private Float priceClose;
	private Float priceChange;
	private Long volume;
	private Date date;

	//getter, setter and constructor
}

3. Отображение XML в режиме гибернации

Теперь создайте два файла отображения гибернации (hbm) – Stock.hbm.xml и StockDailyRecord.hbm.xml .

Файл: Stock.hbm.xml





    
        
            
            
        
        
            
        
        
            
        
        
            
                
            
            
        
    

Файл: StockDailyRecord.hbm.xml





    
        
            
            
        
        
            
        
        
            
        
        
            
        
        
            
        
        
            
        
        
            
        
    


4. Файл конфигурации гибернации

Ставит Stock.hbm.xml и StockDailyRecord.hbm.xml в вашем файле конфигурации гибернации, а также сведения о подключении MySQL.

Файл: hibernate.cfg.xml




 


    com.mysql.jdbc.Driver
    jdbc:mysql://localhost:3306/mkyongdb
    root
    password
    org.hibernate.dialect.MySQLDialect
    true
    true
    
    


5. Запустите Его

Запустите его, Hibernate вставит строку в таблицу ЗАПАСОВ и строку в таблицу STOCK_DAILY_RECORD.

Файл: App.java

package com.mkyong;

import java.util.Date;

import org.hibernate.Session;

import com.mkyong.stock.Stock;
import com.mkyong.stock.StockDailyRecord;
import com.mkyong.util.HibernateUtil;

public class App {
	public static void main(String[] args) {
	
        System.out.println("Hibernate one to many (XML Mapping)");
	Session session = HibernateUtil.getSessionFactory().openSession();

	session.beginTransaction();

	Stock stock = new Stock();
        stock.setStockCode("7052");
        stock.setStockName("PADINI");
        session.save(stock);
        
        StockDailyRecord stockDailyRecords = new StockDailyRecord();
        stockDailyRecords.setPriceOpen(new Float("1.2"));
        stockDailyRecords.setPriceClose(new Float("1.1"));
        stockDailyRecords.setPriceChange(new Float("10.0"));
        stockDailyRecords.setVolume(3000000L);
        stockDailyRecords.setDate(new Date());
        
        stockDailyRecords.setStock(stock);        
        stock.getStockDailyRecords().add(stockDailyRecords);

        session.save(stockDailyRecords);

	session.getTransaction().commit();
	System.out.println("Done");
	}
}

Выход …

Hibernate one to many (XML Mapping)
Hibernate: 
    insert 
    into
        mkyongdb.stock
        (STOCK_CODE, STOCK_NAME) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        mkyongdb.stock_daily_record
        (STOCK_ID, PRICE_OPEN, PRICE_CLOSE, PRICE_CHANGE, VOLUME, DATE) 
    values
        (?, ?, ?, ?, ?, ?)

Ссылка

  1. Документация гибернации – отношение “один ко многим”.

Оригинал: “https://mkyong.com/hibernate/hibernate-one-to-many-relationship-example/”