Отношения “многие ко многим” возникают, когда каждая запись в сущности может иметь множество связанных записей в другой сущности и наоборот.
В этом уроке мы покажем вам, как работать со связью таблиц “многие ко многим” в режиме гибернации с помощью файла сопоставления XML (hbm).
Инструменты и технологии, используемые в этом учебном пособии:
- Спящий режим 3.6.3. Окончательный
- MySQL 5.1.15
- Maven 3.0.3
- Затмение 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
Ссылка
Оригинал: “https://mkyong.com/hibernate/hibernate-many-to-many-relationship-example/”