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

 

      关联关系是在领域模型建模中经常使用到的一种关系,它是对现实世界中事物之间的关系最基本的表示。
     关联关系指的是不同持久化类之间的一种结构关系,简单的说,关联关系描述某个对象在一段时间内一直知道另一个对象的存在。
     关联关系包括多样性的关联和方向性的关联。
     Hibernate 框架作为一种 ORM 技术的实现,对关联关系的映射实现得很完美,也易于理解和掌握,接下来分别介绍各类型关联关系的映射在 Hibernate 中是如何实现的。   
 

 

 

1、单向多对一

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

 


Department.java(一方)

 

Java代码 复制代码  收藏代码
  1. package com.zxf.domain;   
  2.   
  3.   
  4. /** 部门实体类 */  
  5. public class Department {   
  6.     private Long id;                //对象标识符(OID)   
  7.     private String name;            //姓名   
  8.     private String description;     //入职时间   
  9.        
  10.     public Department(){}              //无参数的构造方法   
  11.   
  12.     //以下省略所有属性的getters和setters方法...   
  13. }  
package com.zxf.domain;


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

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

 Employee.java(多方)

Java代码 复制代码  收藏代码
  1. package com.qiujy.domain;   
  2.   
  3. import java.util.Date;   
  4.   
  5. /** 员工实体类 */  
  6. public class Employee {   
  7.     private Long id;                //对象标识符(OID)   
  8.     private String username;        //姓名   
  9.     private Date joinTime;          //入职时间   
  10.        
  11.     private Department dept;        //所属的部门   
  12.   
  13.     public Employee(){}             //无参数的构造方法   
  14.   
  15.     //以下省略所有属性的getters和setters方法...   
  16. }  
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

Xml代码 复制代码  收藏代码
  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.Department" table="department">  
  9.         <!-- 映射对象标识符 -->  
  10.         <id name="id" column="id" type="long">  
  11.             <generator class="native" />  
  12.         </id>  
  13.         <!-- 映射普通属性 -->  
  14.         <property name="name"/>  
  15.         <property name="description"/>  
  16.     </class>  
  17. </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.Department" table="department">
		<!-- 映射对象标识符 -->
		<id name="id" column="id" type="long">
			<generator class="native" />
		</id>
		<!-- 映射普通属性 -->
		<property name="name"/>
		<property name="description"/>
	</class>
</hibernate-mapping>

Employee.hbm.xml

Xml代码 复制代码  收藏代码
  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.Employee"    
  9.            table="employee">  
  10.         <!-- 映射对象标识符 -->  
  11.         <id name="id" column="id" type="long">  
  12.             <generator class="native" />  
  13.         </id>  
  14.         <!-- 映射普通属性 -->  
  15.         <property name="username" not-null="true" />  
  16.         <property name="joinTime"    
  17.                   column="join_time" type="timestamp"/>  
  18.            
  19.         <!-- 用many-to-one元素映射多对一关联   
  20.              name属性:指定关联的属性名   
  21.              column属性:指定此关联属性在数据库表中的外键字段名   
  22.          -->  
  23.         <many-to-one name="dept" column="dept_id"/>  
  24.     </class>  
  25. </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.Employee" 
	       table="employee">
		<!-- 映射对象标识符 -->
		<id name="id" column="id" type="long">
			<generator class="native" />
		</id>
		<!-- 映射普通属性 -->
		<property name="username" not-null="true" />
		<property name="joinTime" 
		          column="join_time" type="timestamp"/>
		
		<!-- 用many-to-one元素映射多对一关联
		     name属性:指定关联的属性名
		     column属性:指定此关联属性在数据库表中的外键字段名
		 -->
		<many-to-one name="dept" column="dept_id"/>
	</class>
</hibernate-mapping>

配置文件:hibernate.cfg.xml

Xml代码 复制代码  收藏代码
  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/Department.hbm.xml" />  
  35.         <mapping resource="com/zxf/domain/Employee.hbm.xml" />  
  36.     </session-factory>  
  37. </hibernate-configuration>  
<?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="hibernate.dialect">
			org.hibernate.dialect.MySQLInnoDBDialect
		</property>
		
		<!-- 数据库连接参数设置 -->
		<property name="hibernate.connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property 

name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123</property>
	
		<!--实际操作数据库时是否显示SQL -->
		<!-- 
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		-->
		
		<!--将数据库schema的DDL导出到数据库 -->
		<property name="hibernate.hbm2ddl.auto">update</property>

		<!-- 以下定义实体类与数据库表的映像文件 -->
		<mapping resource="com/zxf/domain/Department.hbm.xml" />
		<mapping resource="com/zxf/domain/Employee.hbm.xml" />
	</session-factory>
</hibernate-configuration>

2、单向一对多


     举个示例来映射单向一对多关联关系。如:一个账号可以下多个订单。

Order.java(多方   配置文件比较简单)

Java代码 复制代码  收藏代码
  1. package com.zxf.domain;   
  2.   
  3. import java.util.Date;   
  4.   
  5. /** 订单实体类 */  
  6. public class Order {   
  7.     private Long id;                //对象标识符(OID)   
  8.     private String orderNo;         //订单编号   
  9.     private Date createdTime;       //下单时间   
  10.   
  11.     public Order(){}             //无参数的构造方法   
  12.   
  13.     //以下省略所有属性的getters和setters方法...   
  14. }  
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(一方    配置文件相对复杂)

Java代码 复制代码  收藏代码
  1. package com.zxf.domain;   
  2.   
  3. import java.util.Set;   
  4.   
  5.   
  6. /** 账号实体类 */  
  7. public class Account {   
  8.     private Long id;                //对象标识符(OID)   
  9.     private String loginName;       //姓名   
  10.     private Set<Order> orderSet;    //所下订单的集合   
  11.        
  12.     public Account(){}              //无参数的构造方法   
  13.   
  14.     //以下省略所有属性的getters和setters方法...   
  15. }  
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代码 复制代码  收藏代码
  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代码 复制代码  收藏代码
  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代码 复制代码  收藏代码
  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
分享到:
评论

 

      关联关系是在领域模型建模中经常使用到的一种关系,它是对现实世界中事物之间的关系最基本的表示。
     关联关系指的是不同持久化类之间的一种结构关系,简单的说,关联关系描述某个对象在一段时间内一直知道另一个对象的存在。
     关联关系包括多样性的关联和方向性的关联。
     Hibernate 框架作为一种 ORM 技术的实现,对关联关系的映射实现得很完美,也易于理解和掌握,接下来分别介绍各类型关联关系的映射在 Hibernate 中是如何实现的。   
 

 

 

1、单向多对一

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

 


Department.java(一方)

 

Java代码 复制代码  收藏代码
  1. package com.zxf.domain;   
  2.   
  3.   
  4. /** 部门实体类 */  
  5. public class Department {   
  6.     private Long id;                //对象标识符(OID)   
  7.     private String name;            //姓名   
  8.     private String description;     //入职时间   
  9.        
  10.     public Department(){}              //无参数的构造方法   
  11.   
  12.     //以下省略所有属性的getters和setters方法...   
  13. }  
package com.zxf.domain;


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

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

 Employee.java(多方)

Java代码 复制代码  收藏代码
  1. package com.qiujy.domain;   
  2.   
  3. import java.util.Date;   
  4.   
  5. /** 员工实体类 */  
  6. public class Employee {   
  7.     private Long id;                //对象标识符(OID)   
  8.     private String username;        //姓名   
  9.     private Date joinTime;          //入职时间   
  10.        
  11.     private Department dept;        //所属的部门   
  12.   
  13.     public Employee(){}             //无参数的构造方法   
  14.   
  15.     //以下省略所有属性的getters和setters方法...   
  16. }  
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

Xml代码 复制代码  收藏代码
  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.Department" table="department">  
  9.         <!-- 映射对象标识符 -->  
  10.         <id name="id" column="id" type="long">  
  11.             <generator class="native" />  
  12.         </id>  
  13.         <!-- 映射普通属性 -->  
  14.         <property name="name"/>  
  15.         <property name="description"/>  
  16.     </class>  
  17. </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.Department" table="department">
		<!-- 映射对象标识符 -->
		<id name="id" column="id" type="long">
			<generator class="native" />
		</id>
		<!-- 映射普通属性 -->
		<property name="name"/>
		<property name="description"/>
	</class>
</hibernate-mapping>

Employee.hbm.xml

Xml代码 复制代码  收藏代码
  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.Employee"    
  9.            table="employee">  
  10.         <!-- 映射对象标识符 -->  
  11.         <id name="id" column="id" type="long">  
  12.             <generator class="native" />  
  13.         </id>  
  14.         <!-- 映射普通属性 -->  
  15.         <property name="username" not-null="true" />  
  16.         <property name="joinTime"    
  17.                   column="join_time" type="timestamp"/>  
  18.            
  19.         <!-- 用many-to-one元素映射多对一关联   
  20.              name属性:指定关联的属性名   
  21.              column属性:指定此关联属性在数据库表中的外键字段名   
  22.          -->  
  23.         <many-to-one name="dept" column="dept_id"/>  
  24.     </class>  
  25. </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.Employee" 
	       table="employee">
		<!-- 映射对象标识符 -->
		<id name="id" column="id" type="long">
			<generator class="native" />
		</id>
		<!-- 映射普通属性 -->
		<property name="username" not-null="true" />
		<property name="joinTime" 
		          column="join_time" type="timestamp"/>
		
		<!-- 用many-to-one元素映射多对一关联
		     name属性:指定关联的属性名
		     column属性:指定此关联属性在数据库表中的外键字段名
		 -->
		<many-to-one name="dept" column="dept_id"/>
	</class>
</hibernate-mapping>

配置文件:hibernate.cfg.xml

Xml代码 复制代码  收藏代码
  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/Department.hbm.xml" />  
  35.         <mapping resource="com/zxf/domain/Employee.hbm.xml" />  
  36.     </session-factory>  
  37. </hibernate-configuration>  
<?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="hibernate.dialect">
			org.hibernate.dialect.MySQLInnoDBDialect
		</property>
		
		<!-- 数据库连接参数设置 -->
		<property name="hibernate.connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property 

name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123</property>
	
		<!--实际操作数据库时是否显示SQL -->
		<!-- 
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		-->
		
		<!--将数据库schema的DDL导出到数据库 -->
		<property name="hibernate.hbm2ddl.auto">update</property>

		<!-- 以下定义实体类与数据库表的映像文件 -->
		<mapping resource="com/zxf/domain/Department.hbm.xml" />
		<mapping resource="com/zxf/domain/Employee.hbm.xml" />
	</session-factory>
</hibernate-configuration>

2、单向一对多


     举个示例来映射单向一对多关联关系。如:一个账号可以下多个订单。

Order.java(多方   配置文件比较简单)

Java代码 复制代码  收藏代码
  1. package com.zxf.domain;   
  2.   
  3. import java.util.Date;   
  4.   
  5. /** 订单实体类 */  
  6. public class Order {   
  7.     private Long id;                //对象标识符(OID)   
  8.     private String orderNo;         //订单编号   
  9.     private Date createdTime;       //下单时间   
  10.   
  11.     public Order(){}             //无参数的构造方法   
  12.   
  13.     //以下省略所有属性的getters和setters方法...   
  14. }  
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(一方    配置文件相对复杂)

Java代码 复制代码  收藏代码
  1. package com.zxf.domain;   
  2.   
  3. import java.util.Set;   
  4.   
  5.   
  6. /** 账号实体类 */  
  7. public class Account {   
  8.     private Long id;                //对象标识符(OID)   
  9.     private String loginName;       //姓名   
  10.     private Set<Order> orderSet;    //所下订单的集合   
  11.        
  12.     public Account(){}              //无参数的构造方法   
  13.   
  14.     //以下省略所有属性的getters和setters方法...   
  15. }  
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代码 复制代码  收藏代码
  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代码 复制代码  收藏代码
  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代码 复制代码  收藏代码
  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
分享到:
评论

猜你喜欢

转载自svsesunyuan.iteye.com/blog/1026043