一対一の関連関係


まず、Bean永続化クラス、Department部門クラス(外部キー参照)とManager部門マネージャクラスの2つです.
Department部門クラス
//  
public class Department {
    //  ID
    private Integer deptId;
    //   
    private String depyName;

    //    -  
    private Manager mgr;


    public Department() {
        super();
    }


    public Department(Integer deptId, String depyName, Manager mgr) {
        super();
        this.deptId = deptId;
        this.depyName = depyName;
        this.mgr = mgr;
    }


    public Integer getDeptId() {
        return deptId;
    }


    public void setDeptId(Integer deptId) {
        this.deptId = deptId;
    }


    public String getDepyName() {
        return depyName;
    }


    public void setDepyName(String depyName) {
        this.depyName = depyName;
    }


    public Manager getMgr() {
        return mgr;
    }


    public void setMgr(Manager mgr) {
        this.mgr = mgr;
    }


}

マネージャ部門マネージャクラス
//     
public class Manager {
    //ID
    private Integer mgrId;
    //  
    private String mgrName;

    //     
    private Department dept;

    public Manager() {
        super();
    }

    public Manager(Integer mgrId, String mgrName, Department dept) {
        super();
        this.mgrId = mgrId;
        this.mgrName = mgrName;
        this.dept = dept;
    }

    public Integer getMgrId() {
        return mgrId;
    }

    public void setMgrId(Integer mgrId) {
        this.mgrId = mgrId;
    }

    public String getMgrName() {
        return mgrName;
    }

    public void setMgrName(String mgrName) {
        this.mgrName = mgrName;
    }

    public Department getDept() {
        return dept;
    }

    public void setDept(Department dept) {
        this.dept = dept;
    }


}

XMLプロファイルを次に示します
Department.hbm.xml
<?xml version="1.0"?> 
     <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="entity3">

    <class name="Department" table="department">

        <!-- id:     ,name:       -->
        <id name="deptId" type="java.lang.Integer">
            <!-- name:       -->
            <column name="deptId"/>
            <!--          ,native:           -->
            <generator class="native"/>
        </id>

        <!-- property     -->
        <property name="depyName" type="java.lang.String">
            <column name="depyName"/>
        </property>

        <!--    many-to-one   1-1   unique="true"          -->
        <many-to-one name="mgr" class="Manager" column="mgrId" unique="true" >
        </many-to-one>


    </class>
</hibernate-mapping>

Manager.hbm.xml
<?xml version="1.0"?> 
     <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="entity3">

    <class name="Manager" table="manager">

        <!-- id:     ,name:       -->
        <id name="mgrId" type="java.lang.Integer">
            <!-- name:       -->
            <column name="mgrId"/>
            <!--          ,native:           -->
            <generator class="native"/>
        </id>

        <!-- property     -->
        <property name="mgrName" type="java.lang.String">
            <column name="mgrName"/>
        </property>

        <!--   1-1     :              ,         one-to-one     -->
         <!-- property-ref="mgr":                        :  Department (      ),  Department   mgr Manager ID    -->
        <one-to-one name="dept" class="Department" property-ref="mgr">
        </one-to-one>

    </class>
</hibernate-mapping>

hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> 
     <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!--              -->
        <property name="connection.username">root</property>
        <property name="connection.password">1234</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>

        <!--   Hibernate      -->
        <!-- Hibernate          -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!--              SQL -->
        <property name="show_sql">true</property>

        <!--    SQL      -->
        <property name="format_sql">true</property>

        <!--              -->
        <property name="hbm2ddl.auto">update</property>

        <!--         /     ,  Bean xml   -->
        <!--  :   .  / -->
        <!-- <mapping resource="entity1/Customer.hbm.xml"/> <mapping resource="entity1/Order.hbm.xml"/> -->

        <!-- <mapping resource="entity2/Customer.hbm.xml"/> <mapping resource="entity2/Order.hbm.xml"/> -->

        <mapping resource="entity3/Department.hbm.xml"/>
        <mapping resource="entity3/Manager.hbm.xml"/>

    </session-factory>
</hibernate-configuration> 

HibernateTestテストクラス
public class HibernateTest {
    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;

    @Before
    public void init() {
        // 1.    SessionFactory   
        sessionFactory = null;
            // 1.  Configuration  :  Hibernate                
            // configure();      ,      hibernate.cfg.xml
            Configuration configuration = new Configuration().configure();

            /** * new Configuration       * *     hibernate.properties     * 1:Configuration configuration = new Configuration(); * *       ,      hibernate.cfg.xml * 2:Configuration configuration = new Configuration().configure(); * *       ,    xml,    File * 3:Configuration configuration = new Configuration().configure(file); */

            // 2.    ServiceRegistry  
            // Hibernate                       
            ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .buildServiceRegistry();
            // 3.    SessionFactory
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        // 2.    Session  
        session = sessionFactory.openSession();

        // 3.    
        transaction = session.beginTransaction();
    }

    @After
    public void distroy() {
        // 5.    
        transaction.commit();

        // 6.  Session  
        session.close();

        // 7.  SessionFactory  
        sessionFactory.close();
    }

    @Test
    public void test1(){
        Department dept = new Department();
        dept.setDepyName("dept-a");

        Manager mgr = new Manager();
        mgr.setMgrName("mgr-a");

        //      
        dept.setMgr(mgr);
        mgr.setDept(dept);


        /** *    Manager,   Department * 2 INSERT,0 UPDATE */
        session.save(mgr);
        session.save(dept);

        /** *    Department,   Manager * 2 INSERT,1 UPDATE *   :   Department     ,  Manager   *     Department      */
        session.save(dept);
        session.save(mgr);
    }

    @Test
    public void test2(){
        /** * 1:          ,department    manager *  manager      * 2:            */

        //Department  
        Department dept = (Department) session.get(Department.class,1);
        //  session
        session.close();
        //    Department  Manager
        Manager mgr = dept.getMgr();
        //    
        System.out.println(mgr.getClass());
        //     
        System.out.println(mgr.getMgrName());
    }
}