Ruhezustand - Viele-zu-Viele-Beispiel (XML-Zuordnung)
Viele-zu-viele-Beziehungen treten auf, wenn jeder Datensatz in einer Entität möglicherweise viele verknüpfte Datensätze in einer anderen Entität enthält und umgekehrt.
In diesem Tutorial zeigen wir Ihnen, wie Sie mit einer Many-to-Many-Tabellenbeziehung in Hibernate über eine XML-Zuordnungsdatei (hbm) arbeiten.
Note
Für viele bis viele mit zusätzlichen Spalten in der Verknüpfungstabelle lesen Sie bitte diesetutorial.
In diesen Tutorials verwendete Tools und Technologien:
-
Ruhezustand 3.6.3.Final
-
MySQL 5.1.15
-
Maven 3.0.3
-
Eclipse 3.6
Projektstruktur
Projektstruktur dieses Tutorials.
Projektabhängigkeit
Holen Sie sich die neuestenhibernate.jar aus dem JBoss-Repository.
Datei: 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. Beispiel „viele zu viele“
Dies ist ein Viele-zu-Viele-Beziehungstabellenentwurf, eine STOCK-Tabelle hat mehr als eine KATEGORIE und KATEGORIE kann zu mehr als einem STOCK gehören, die Beziehung ist mit einer dritten Tabelle namens STOCK_CATEGORY verknüpft.
Die Tabelle STOCK_CATEGORY besteht nur aus zwei Primärschlüsseln sowie einer Fremdschlüsselreferenz auf STOCK und CATEGORY.
MySQL-Tabellenskripte
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. Hibernate Model Class
Erstellen Sie zwei Modellklassen -Stock.java
undCategory.java
, um die obigen Tabellen darzustellen. Es ist nicht erforderlich, eine zusätzliche Klasse für die Tabelle 'stock_category' zu erstellen.
Datei: Stock.java
package com.example.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 Setcategories = new HashSet (0); //getter, setter and constructor }
Datei: Category.java
package com.example.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 Setstocks = new HashSet (0); //getter, setter and constructor }
3. Ruhezustand XML-Zuordnung
Erstellen Sie nun zwei Hibernate-Zuordnungsdateien (hbm) -Stock.hbm.xml
undCategory.hbm.xml
. Sie werden feststellen, dass die dritte Tabelle "stock_category" über das Tag "many-to-many" referenziert wird.
Datei: Stock.hbm.xml
Datei: Category.hbm.xml
4. Ruhezustand-Konfigurationsdatei
Setzt nunStock.hbm.xml
undCategory.hbm.xml
und MySQL-Details inhibernate.cfg.xml
.
Datei: hibernate.cfg.xml
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/exampledb root password org.hibernate.dialect.MySQLDialect true true
5. Starte es
Wenn Sie es ausführen, fügt Hibernate einen Datensatz in die Tabelle STOCK, zwei Datensätze in die Tabelle CATEGORY und zwei Datensätze in die Tabelle STOCK) CATEGORY ein.
Datei: App.java
package com.example; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import com.example.stock.Category; import com.example.stock.Stock; import com.example.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"); Setcategories = new HashSet (); categories.add(category1); categories.add(category2); stock.setCategories(categories); session.save(stock); session.getTransaction().commit(); System.out.println("Done"); } }
Ausgabe… Ergebnis sollte selbsterklärend sein
Hibernate many to many (XML Mapping) Hibernate: insert into exampledb.stock (STOCK_CODE, STOCK_NAME) values (?, ?) Hibernate: insert into exampledb.category (NAME, `DESC`) values (?, ?) Hibernate: insert into exampledb.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
Hibernate Annotation
Für viele-zu-viele-Annotationen im Ruhezustand lesen Sie bitte dieseexample.
Laden Sie es herunter -Hibernate-many-to-many-xml-mapping.zip (10 KB)