一対一の関連関係
まず、Bean永続化クラス、Department部門クラス(外部キー参照)とManager部門マネージャクラスの2つです.
Department部門クラス
マネージャ部門マネージャクラス
XMLプロファイルを次に示します
Department.hbm.xml
Manager.hbm.xml
hibernate.cfg.xml
HibernateTestテストクラス
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());
}
}