Hibernate - Exemple un-à-un (mappage XML)

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:

  1. Hibernate 3.6.3.Final

  2. MySQL 5.1.15

  3. Maven 3.0.3

  4. Eclipse 3.6

Structure du projet

Voir la structure finale du projet de ce tutoriel.

one to one project structure

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».

one to one relationship

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)