`
z_xiaofei168
  • 浏览: 200590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

      关联关系是在领域模型建模中经常使用到的一种关系,它是对现实世界中事物之间的关系最基本的表示。
     关联关系指的是不同持久化类之间的一种结构关系,简单的说,关联关系描述某个对象在一段时间内一直知道另一个对象的存在。
     关联关系包括多样性的关联和方向性的关联。
     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方法...
}

 

 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方法...
}

 

 Department.hbm.xml

 

<?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 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 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(多方   配置文件比较简单)

 

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方法...
}

 

Order.hbm.xml

 

<?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 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 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/Account.hbm.xml" />
		<mapping resource="com/zxf/domain/Order.hbm.xml" />
	</session-factory>
</hibernate-configuration>
 
2
3
分享到:
评论

相关推荐

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    Hibernate 一对一唯一外键关联映射详解 Hibernate是一种流行的Java持久层框架,提供了多种关联映射方式,其中一对一唯一外键关联映射是一种常见的关联方式。在本文中,我们将详细介绍Hibernate一对一唯一外键关联...

    Hibernate_关联关系映射配置详解

    Hibernate_关联关系映射配置详解,希望能帮助广大java爱好者

    hibernate-common-annotations.jar

    Hibernate是一个开源的ORM框架,它简化了Java应用与关系数据库之间的交互,通过映射对象模型到关系数据模型,使得开发者可以使用面向对象的方式来处理数据库操作。Hibernate不仅提供了数据持久化的解决方案,还包含...

    最新 hibernate-release-4.2.13.Final.tgz

    这些示例涵盖了从基本的实体定义、配置,到复杂的查询、关联映射,通过实际操作,你可以深入理解Hibernate的工作原理和使用方法。 1. 实体管理:了解如何定义实体类,以及如何使用注解进行元数据配置。 2. 数据库...

    hibernate技术详解------------------

    Hibernate是Java领域中一款强大的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了Java数据库编程。在这个“hibernate技术详解”中,我们将深入探讨Hibernate的核心概念、配置、...

    Hibernate映射关联详解

    ### Hibernate映射关联详解 #### 一、理解一对多双向关联关系 在关系型数据库设计中,一对多关联是常见的数据组织方式之一。而在面向对象编程语言中,这种关系则通常通过集合(如Set或List)来实现。本文将重点...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    《Hibernate注释与枚举映射详解》 Hibernate作为Java领域中最流行的ORM(对象关系映射)框架之一,极大地简化了数据库操作。本篇将详细探讨`hibernate-annotations-3.4.0.GA`和`hibernate-entitymanager-3.4.0.GA`...

    hibernate-distribution-3.5.0-Final-dist文档

    1. **对象关系映射(ORM)**: Hibernate通过映射Java类到数据库表,将对象的实例与数据库记录关联起来,实现了对象层和数据层的解耦。 2. **Entity**: Hibernate中的实体代表数据库中的表,它们通常是Java类,通过...

    详解Hibernate一对一映射配置

    在Java持久化框架Hibernate中,一对一(One-to-One)映射是对象关系映射的一种常见方式,用于表示两个实体之间一对一的关系。这种关系通常出现在一个实体的实例只能与另一个实体的单个实例相关联的情况。下面我们将...

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    Hibernate作为Java领域中的一个强大ORM(对象关系映射)框架,为开发者提供了在Java应用程序中操作数据库的强大工具。它允许我们将数据库操作转换为对Java对象的操作,大大简化了开发流程。而Hibernate Annotations...

    hibernate的关联映射

    【hibernate关联映射详解】 Hibernate 是一款流行的Java持久层框架,用于简化数据库操作。在Hibernate中,关联映射是实现对象关系映射(ORM)的关键,它允许我们在对象模型和关系数据库之间建立联系。关联映射主要...

    hibernate-extensions-2.1.3

    Hibernate是一个广受欢迎的Java ORM(对象关系映射)框架,它极大地简化了数据库与Java应用程序之间的交互。本文将深入探讨Hibernate的扩展库2.1.3,该版本包含了一系列增强功能,旨在进一步优化开发者的数据库操作...

    hibernate-annotations-3.4.0.GA.rar

    - `@ManyToOne`, `@OneToMany`: 表示一对多或多对一的关系,用于实体间的关联映射。 - `@OneToOne`: 一对一关系,一个实体对应另一个实体的唯一实例。 - `@JoinColumn`: 定义外键列的属性,如名称、是否自增等。 ...

    hibernate实体关联关系映射

    ### Hibernate实体关联关系映射详解 #### 一、引言 Hibernate作为一种强大的对象关系映射(Object Relational Mapping,简称ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了持久化层的开发工作,...

    hibernate-release-4.3.9.Final.rar

    Hibernate,作为Java领域中的一个著名ORM(对象关系映射)框架,它极大地简化了数据库操作,使得开发者能够以面向对象的方式来处理数据库交互。这次我们关注的是Hibernate 4.3.9.Final版本,它包含了“required”...

    hibernate配置文件详解

    -- 一对多关联关系 --&gt; &lt;set name="cities" table="cities" inverse="true"&gt; &lt;key column="province_id" /&gt; &lt;one-to-many class="com.Hibernate.City" /&gt; &lt;/set&gt; &lt;/class&gt; &lt;/hibernate-mapping&gt; ``` 在该文件...

    hibernate-jpa-2.1-api 1.0.0.Final API

    Hibernate是Java领域中最受欢迎的对象关系映射(ORM)框架之一,而JPA则是Java平台上的标准 ORM 规范,允许开发者以面向对象的方式处理数据库操作。"API"代表应用程序编程接口,通常是一系列预定义的函数、类和接口...

    hibernate关联映射的作用和常用属性解释

    其中,“关联映射”是Hibernate中的一个重要概念,用于处理实体之间的关联关系,例如一对一、一对多、多对一以及多对多等。 #### 常用属性解析 为了更好地理解和运用Hibernate中的关联映射机制,我们需要深入了解...

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    在Java的持久化框架Hibernate中,关联映射是至关重要的概念,它允许我们将数据库中的表关系映射到对象之间的关系。SSH(Struts、Spring、Hibernate)是经典的Java Web开发框架,其中Hibernate负责数据访问层,提供了...

Global site tag (gtag.js) - Google Analytics