Hibernate详解(四)---->>关联关系映射(一)

Gbug00 2011-05-02

      关联关系是在领域模型建模中经常使用到的一种关系,它是对现实世界中事物之间的关系最基本的表示。

关联关系指的是不同持久化类之间的一种结构关系,简单的说,关联关系描述某个对象在一段时间内一直知道另一个对象的存在。

关联关系包括多样性的关联和方向性的关联。

     Hibernate 框架作为一种 ORM 技术的实现,对关联关系的映射实现得很完美,也易于理解和掌握,接下来分别介绍各类型关联关系的映射在 Hibernate 中是如何实现的。     

1、单向多对一    多对一是最常见的,也是最容易理解的一种关联。比如:多个员工属性同一个部门。多个产品属于同一个类别,多个产品订单属于同一个账号。单向的多对一指的是多方可以访问一方,而一方不知道多方的存在。

Department.java(一方)

package com.zxf.domain;   
  
  

/** 部门实体类 */   

public class Department {    

    private Long id;                //对象标识符(OID)    

    private String name;            //姓名    

    private String description;     //入职时间    
       

    public Department(){}              //无参数的构造方法    
  

    //以下省略所有属性的getters和setters方法...    
}  
package com.zxf.domain;


/** 部门实体类 */
public class Department {
	private Long id;                //对象标识符(OID)
	private String name;            //姓名
	private String description;     //入职时间
	
	public Department(){}              //无参数的构造方法

	//以下省略所有属性的getters和setters方法...
}

 Employee.java(多方)

package com.qiujy.domain;   
  

import java.util.Date;    
  

/** 员工实体类 */   

public class Employee {    

    private Long id;                //对象标识符(OID)    

    private String username;        //姓名    

    private Date joinTime;          //入职时间    
       

    private Department dept;        //所属的部门    
  

    public Employee(){}             //无参数的构造方法    
  

    //以下省略所有属性的getters和setters方法...    
}  
package com.qiujy.domain;

import java.util.Date;

/** 员工实体类 */
public class Employee {
	private Long id;                //对象标识符(OID)
	private String username;        //姓名
	private Date joinTime;          //入职时间
	
	private Department dept;        //所属的部门

	public Employee(){}             //无参数的构造方法

	//以下省略所有属性的getters和setters方法...
}

 Department.hbm.xml

package com.zxf.domain;   
  

import java.util.Date;    
  

/** 订单实体类 */   

public class Order {    

    private Long id;                //对象标识符(OID)    

    private String orderNo;         //订单编号    

    private Date createdTime;       //下单时间    
  

    public Order(){}             //无参数的构造方法    
  

    //以下省略所有属性的getters和setters方法...    
}  
package com.zxf.domain;

import java.util.Date;

/** 订单实体类 */
public class Order {
	private Long id;                //对象标识符(OID)
	private String orderNo;         //订单编号
	private Date createdTime;       //下单时间

	public Order(){}             //无参数的构造方法

	//以下省略所有属性的getters和setters方法...
}

Account.java(一方    配置文件相对复杂)

package com.zxf.domain;   
  

import java.util.Set;    
  
  

/** 账号实体类 */   

public class Account {    

    private Long id;                //对象标识符(OID)    

    private String loginName;       //姓名    

    private Set<Order> orderSet;    //所下订单的集合    
       

    public Account(){}              //无参数的构造方法    
  

    //以下省略所有属性的getters和setters方法...    
}  
package com.zxf.domain;

import java.util.Set;


/** 账号实体类 */
public class Account {
	private Long id;                //对象标识符(OID)
	private String loginName;       //姓名
	private Set<Order> orderSet;    //所下订单的集合
	
	public Account(){}              //无参数的构造方法

	//以下省略所有属性的getters和setters方法...
}

Order.hbm.xml

Xml代码 Hibernate详解(四)---->>关联关系映射(一) Hibernate详解(四)---->>关联关系映射(一)Hibernate详解(四)---->>关联关系映射(一)
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping>  
  7.   <!-- 映射持久化类 -->  
  8.     <class name="com.zxf.domain.Order"    
  9.            table="orders">  
  10.         <!-- 映射对象标识符 -->  
  11.         <id name="id" column="id" type="long">  
  12.             <generator class="native" />  
  13.         </id>  
  14.         <!-- 映射普通属性 -->  
  15.         <property name="orderNo" column="order_no"/>  
  16.         <property name="createdTime"    
  17.                   column="created_time" type="timestamp"/>  
  18.     </class>  
  19. </hibernate-mapping>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <!-- 映射持久化类 -->
	<class name="com.zxf.domain.Order" 
	       table="orders">
		<!-- 映射对象标识符 -->
		<id name="id" column="id" type="long">
			<generator class="native" />
		</id>
		<!-- 映射普通属性 -->
		<property name="orderNo" column="order_no"/>
		<property name="createdTime" 
		          column="created_time" type="timestamp"/>
	</class>
</hibernate-mapping>
 

Account.hbm.xml

Xml代码 Hibernate详解(四)---->>关联关系映射(一) Hibernate详解(四)---->>关联关系映射(一)Hibernate详解(四)---->>关联关系映射(一)
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping>  
  7.   <!-- 映射持久化类 -->  
  8.     <class name="com.zxf.domain.Account" table="account">  
  9.         <!-- 映射对象标识符 -->  
  10.         <id name="id" column="id" type="long">  
  11.             <generator class="native" />  
  12.         </id>  
  13.         <!-- 映射普通属性 -->  
  14.         <property name="loginName" column="login_name"/>  
  15.         <!-- 映射集合属性,关联到多端的实体类 -->  
  16.         <set name="orderSet" cascade="save-update">  
  17.                 <!-- 用key元素指定关联的外键列 -->  
  18.             <key column="account_id" />  
  19.             <!-- 用one-to-many元素关联到多端的实体类 -->  
  20.             <one-to-many class="com.zxf.domain.Order" />  
  21.         </set>  
  22.     </class>  
  23. </hibernate-mapping>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <!-- 映射持久化类 -->
	<class name="com.zxf.domain.Account" table="account">
		<!-- 映射对象标识符 -->
		<id name="id" column="id" type="long">
			<generator class="native" />
		</id>
		<!-- 映射普通属性 -->
		<property name="loginName" column="login_name"/>
		<!-- 映射集合属性,关联到多端的实体类 -->
		<set name="orderSet" cascade="save-update">
				<!-- 用key元素指定关联的外键列 -->
	        <key column="account_id" />
	        <!-- 用one-to-many元素关联到多端的实体类 -->
	        <one-to-many class="com.zxf.domain.Order" />
	    </set>
	</class>
</hibernate-mapping>
 

配置文件:hibernate.cfg.xml

Xml代码 Hibernate详解(四)---->>关联关系映射(一) Hibernate详解(四)---->>关联关系映射(一)Hibernate详解(四)---->>关联关系映射(一)
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC   
  3.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
  4.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5.   
  6. <hibernate-configuration>  
  7.     <session-factory>  
  8.            
  9.         <!-- 数据库方言设置 -->  
  10.         <property name="hibernate.dialect">  
  11.             org.hibernate.dialect.MySQLInnoDBDialect   
  12.         </property>  
  13.            
  14.         <!-- 数据库连接参数设置 -->  
  15.         <property name="hibernate.connection.driver_class">  
  16.             com.mysql.jdbc.Driver   
  17.         </property>  
  18.         <property    
  19.   
  20. name="hibernate.connection.url">jdbc:mysql:///hibernate</property>  
  21.         <property name="hibernate.connection.username">root</property>  
  22.         <property name="hibernate.connection.password">123</property>  
  23.        
  24.         <!--实际操作数据库时是否显示SQL -->  
  25.         <!--    
  26.         <property name="hibernate.show_sql">true</property>  
  27.         <property name="hibernate.format_sql">true</property>  
  28.         -->  
  29.            
  30.         <!--将数据库schema的DDL导出到数据库 -->  
  31.         <property name="hibernate.hbm2ddl.auto">update</property>  
  32.   
  33.         <!-- 以下定义实体类与数据库表的映像文件 -->  
  34.         <mapping resource="com/zxf/domain/Account.hbm.xml" />  
  35.         <mapping</st

相关推荐