Hibernate - Exemple individuel (mappage XML)
Une relation un à un se produit lorsqu'une entité est liée à exactement une occurrence dans une autre entité.
Dans ce didacticiel, nous vous montrons comment travailler avec une relation de table un-à-un dans Hibernate, via un fichier de mappage XML (hbm).
Outils et technologies utilisés dans ces didacticiels:
-
Hibernate 3.6.3.Final
-
MySQL 5.1.15
-
Maven 3.0.3
-
Eclipse 3.6
Structure du projet
Voir la structure finale du projet de ce tutoriel.
Dépendance du projet
Récupérezhibernate.jar du référentiel JBoss, Maven s'occupera de toutes les dépendances liées pour vous.
Fichier: 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. Relation de table «un à un»
Une conception de table de relationsone-to-one, une table STOCK contient exactement un enregistrement dans la table STOCK_DETAIL. Les deux tables ont le même Stock_Id comme clé primaire. Dans la table STOCK_DETAIL, Stock_Id est la clé primaire et également une clé étrangère vers la table STOCK. Il s'agit de la manière courante de définir une relation de table «un à un».
Pour obtenir le script de table STOCK et STOCK_DETAIL, reportez-vous à cette «http://www.example.com/mysql/how-to-define-one-to-one-relationship-in-mysql/[une à une relation de table dans MySQL] ».
2. Classe de modèle Hibernate
Créez deux classes de modèle -Stock.java
etStockDetail.java
, pour représenter les tables ci-dessus.
Fichier: 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 }
Fichier: 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
Maintenant, créez deux fichiers de mappage Hibernate (hbm) -Stock.hbm.xml
etStockDetail.hbm.xml
.
Fichier: Stock.hbm.xml
Fichier: StockDetail.hbm.xml
stock
Note
La principale difficulté dans cette relationone-to-one est de s'assurer que les deux se voient attribuer la même clé primaire. Dans StockDetail.hbm.xml, unforeign identifier generator spécial est déclaré, il saura obtenir la valeur de la clé primaire de la table STOCK. Avec constrained = "true", cela garantit que le stock doit exister.
4. Hibernate Configuration File
PlaceStock.hbm.xml
etStockDetail.hbm.xml
dans votre fichier de configuration Hibernate, ainsi que les détails de connexion MySQL.
_
Fichier: hibernate.cfg.xml_
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/exampledb root password org.hibernate.dialect.MySQLDialect true
5. Exécuter
Exécutez-le, Hibernate insérera une ligne dans la table STOCK et une ligne dans la table STOCK_DETAIL.
Fichier: 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"); } }
Sortie
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
Pour l'annotation un-à-un dans Hibernate, veuillez vous référer à ceexample
Téléchargez-le -Hibernate-one-to-one-xml-mapping.zip (10 Ko)