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

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

– Спящий режим – пример “Многие ко многим” (сопоставление XML)

Отношения “многие ко многим” возникают, когда каждая запись в сущности может иметь множество связанных записей в другой сущности и наоборот.

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

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

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

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

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

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

Получить последнюю информацию hibernate.jar из репозитория JBoss.

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

Таблица STOCK_CATEGORY состоит только из двух первичных ключей, а также ссылки на внешний ключ, возвращающей к ЗАПАСУ и КАТЕГОРИИ.

Сценарии таблиц MySQL

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
)

CREATE TABLE `category` (
  `CATEGORY_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` varchar(10) NOT NULL,
  `DESC` varchar(255) NOT NULL,
  PRIMARY KEY (`CATEGORY_ID`) USING BTREE
)

CREATE TABLE  `stock_category` (
  `STOCK_ID` int(10) unsigned NOT NULL,
  `CATEGORY_ID` int(10) unsigned NOT NULL,
  PRIMARY KEY (`STOCK_ID`,`CATEGORY_ID`),
  CONSTRAINT `FK_CATEGORY_ID` FOREIGN KEY (`CATEGORY_ID`) REFERENCES `category` (`CATEGORY_ID`),
  CONSTRAINT `FK_STOCK_ID` FOREIGN KEY (`STOCK_ID`) REFERENCES `stock` (`STOCK_ID`)
)

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

Создайте два класса моделей – Stock.java и Category.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 categories = new HashSet(0);

	//getter, setter and constructor
}

Файл: Category.java

package com.mkyong.stock;

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

public class Category implements java.io.Serializable {

	private Integer categoryId;
	private String name;
	private String desc;
	private Set stocks = new HashSet(0);

	//getter, setter and constructor
}

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

Теперь создайте два файла отображения гибернации (hbm) – Stock.hbm.xml и Category.hbm.xml . Вы заметите, что третья таблица ‘ stock_category ‘ является ссылкой через тег ” многие ко многим “.

Файл: Stock.hbm.xml





    
        
            
            
        
        
            
        
        
            
        
        
            
                
            
            
                
            
        
    


Файл: Category.hbm.xml





    
        
            
            
        
        
            
        
        
            
        
        
            
                
            
            
                
            
        
    

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

Теперь, ставит Stock.hbm.xml и Category.hbm.xml и детали MySQL в hibernate.cfg.xml .

Файл: hibernate.cfg.xml




 


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


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

Запустите его, Hibernate вставит запись в таблицу ЗАПАСОВ, две записи в таблицу КАТЕГОРИЙ, а также две записи в таблицу КАТЕГОРИЙ ЗАПАСОВ.

Файл: App.java

package com.mkyong;

import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import com.mkyong.stock.Category;
import com.mkyong.stock.Stock;
import com.mkyong.util.HibernateUtil;

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

	session.beginTransaction();

	Stock stock = new Stock();
        stock.setStockCode("7052");
        stock.setStockName("PADINI");
 
        Category category1 = new Category("CONSUMER", "CONSUMER COMPANY");
        Category category2 = new Category("INVESTMENT", "INVESTMENT COMPANY");
    
        Set categories = new HashSet();
        categories.add(category1);
        categories.add(category2);
        
        stock.setCategories(categories);
        
        session.save(stock);
    
	session.getTransaction().commit();
	System.out.println("Done");
	}
}

Вывод… результат должен быть самоочевидным

Hibernate many to many (XML Mapping)
Hibernate: 
    insert 
    into
        mkyongdb.stock
        (STOCK_CODE, STOCK_NAME) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        mkyongdb.category
        (NAME, `DESC`) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        mkyongdb.category
        (NAME, `DESC`) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        stock_category
        (STOCK_ID, CATEGORY_ID) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        stock_category
        (STOCK_ID, CATEGORY_ID) 
    values
        (?, ?)
Done

Ссылка

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

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