`
tianhei
  • 浏览: 210389 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate 关联映射之集合映射

阅读更多

Hibernate的关联映射包括:

一对一(Persion - IDCard)

一对多(Department - Employee)

多对一(Employee - Department)

多对多(Teacher - Student)

组件映射(User - Name)

集合映射(Set、List、Map)

inverse和cascade(Employee - Department)

 

本文以集合映射为例:

集合映射包括:set、list、array、bag、map

 

一、set

语法:

		<set name="" access="" batch-size="" cascade="" catalog=""
			 check="" collection-type="" embed-xml="true" fetch="join"
			 inverse="false" lazy="true" mutable="true" node=""
			 optimistic-lock="true" order-by="" outer-join="true"
			 persister="" schema="" sort="unsorted" subselect=""
			 table="" where="">
				 <cache usage="read-only" include="all" region=""/>
				 <comment></comment>
				 <composite-element class="" node=""></composite-element>
				 <element />
				 <filter name=""></filter>
				 <key></key>
				 <loader query-ref=""/>
				 <many-to-any id-type="" meta-type="">f</many-to-any>
				 <many-to-many></many-to-many>
				 <meta attribute=""></meta>
				 <one-to-many/>
				 <sql-delete></sql-delete>
				 <sql-delete-all></sql-delete-all>
				 <sql-insert></sql-insert>
				 <sql-update></sql-update>
				 <subselect></subselect>
				 <synchronize table=""/>
		</set>

其中:

1、cascade配置级联关系。用来说明当对主对象进行某种操作时是否自动对其关联的从对象也做操作,cascade值包括:

none,all,save-update,delete,lock,refresh,evict,replicate,persist,merge,delete-orphan。

缺省情况下是不做级联操作的。一般对多对一、多对多不设置级联,在一对一、一对多中设置级联。

2、inverse表示是否要放弃维护关联关系。在一对多和多对多的时候,两边是都可以维护关联关系的,为避免重复操作数据库,可以选择一边放弃维护关联关系。

inverse不能在有序的集合中使用,也就是说不能在list、array中使用。

inverse只在集合元素中可以使用,因为只有集合元素中才涉及到对象间的关联关系。

 

 例子: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="com.cos.entity">
	<class name="Department">		
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name" column="name"/>
		<set name="emps">
			<key column="dept_id"/>
			<one-to-many class="Employee"/>
		</set>
	</class>
</hibernate-mapping>

其中:

set标签中的name是Department.java中的一对多字段empt,代表Employee.java这个对象

key中的column值代表映射到<one-to-many>标标签中对象的数据库的字段

one-to-many代表一对多所映射的对象

 

二、list

语法:

		<list name="" access="" batch-size="" cascade="" catalog="" check=""
			  collection-type="" embed-xml="true" fetch="join" inverse="false"
			  lazy="true" mutable="true" node="" optimistic-lock="true" 
			  outer-join="true" persister="" schema="" subselect="" table=""
			  where="">
				  	<cache usage="read-only"/>
				  	<comment></comment>
				  	<composite-element class=""></composite-element>
				  	<element></element>
				  	<filter name=""></filter>
				  	<index></index>
				  	<key></key>
				  	<list-index></list-index>
				  	<loader query-ref=""/>
				  	<many-to-any id-type=""></many-to-any>
				  	<many-to-many></many-to-many>
				  	<meta attribute=""></meta>
				  	<one-to-many/>
				  	<sql-delete></sql-delete>
				  	<sql-delete-all></sql-delete-all>
				  	<sql-insert></sql-insert>
				  	<sql-update></sql-update>
				  	<subselect></subselect>
				  	<synchronize table=""/>
		</list>

例子: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="com.cos.entity">
	<class name="Department">		
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name" column="name"/>
		<!--  set name="emps">
			<key column="dept_id"/>
			<one-to-many class="Employee"/>
		</set> -->
		<list name="emps">
			<key column="dept_id"/>
			<list-index column="order_id"/>
			<one-to-many class="Employee"/>
		</list>
	</class>
</hibernate-mapping>

 其中list标签中的name值是Department对象中的属性,一对多属性。

key中的column属性是一对多表中的字段,和本表中的id对应

list-index标签是记录加入list中的顺序。

one-to-many标签的class值是一对多中的多对象。

 

三、bag

语法:

		<bag name="" access="" batch-size="" cascade="" catalog="" check=""
			  collection-type="" embed-xml="true" fetch="join" inverse="false"
			  lazy="true" mutable="true" node="" optimistic-lock="true" 
			  outer-join="true" persister="" schema="" subselect="" table=""
			  where="">
					<cache usage="read-only"/>
				  	<comment></comment>
				  	<composite-element class=""></composite-element>
				  	<element></element>
				  	<filter name=""></filter>
				  	<key></key>
				  	<loader query-ref=""/>
				  	<many-to-any id-type=""></many-to-any>
				  	<many-to-many></many-to-many>
				  	<meta attribute=""></meta>
				  	<one-to-many/>
				  	<sql-delete></sql-delete>
				  	<sql-delete-all></sql-delete-all>
				  	<sql-insert></sql-insert>
				  	<sql-update></sql-update>
				  	<subselect></subselect>
				  	<synchronize table=""/>
		</bag>

 例子: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="com.cos.entity">
	<class name="Department">		
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name" column="name"/>
		<bag name="emps">
			<key column="dept_id"/>
			<one-to-many class="Employee"/>
		</bag>
	</class>
</hibernate-mapping>

 其中:

bag标签要与list集合对应,name属性是一对多的属性,是Department对象中的属性。 

key标签的column属性是Employee对象中的数据库字段值

one-to-many标签是一对多中的多对象

bag必须和list集合对应,跟list标签的区别是bag没有顺序,list有顺序。

 

四、map

语法:

		<map name="" access="" batch-size="" cascade="" catalog="" check=""  
      		 collection-type="" embed-xml="true" fetch="join" inverse="false"  
      		 lazy="true" mutable="true" node="" optimistic-lock="true"    
      		 outer-join="true" persister="" schema="" subselect="" table=""  
      		 where="">
      		 	<cache usage="read-only"/>  
	            <comment></comment>  
	            <composite-element class=""></composite-element>  
	            <composite-index class=""></composite-index>
	            <composite-map-key class=""></composite-map-key>
	            <element></element>  
	            <filter name=""></filter>  
	            <index></index>
	            <index-many-to-any id-type=""></index-many-to-any>
	            <index-many-to-many class=""></index-many-to-many>
	            <key></key>  
	            <loader query-ref=""/>  
	            <many-to-any id-type=""></many-to-any>  
	            <many-to-many></many-to-many>  
	            <map-key></map-key>
	            <map-key-many-to-many></map-key-many-to-many>
	            <meta attribute=""></meta>  
	            <one-to-many/>  
	            <sql-delete></sql-delete>  
	            <sql-delete-all></sql-delete-all>  
	            <sql-insert></sql-insert>  
	            <sql-update></sql-update>  
	            <subselect></subselect>  
	            <synchronize table=""/>    
		</map>

例子:

<?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="com.cos.entity">
	<class name="Department">		
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name" unique="true" />
		<map name="emps">
			<key column="dept_id"/>
			<map-key type="string" column="key_"/>
			<one-to-many class="Employee"/>
		</map>
	</class>
</hibernate-mapping>

其中:

map标签说明的是一对多用的是map,name是Department中的属性。

key中的clumn是Employee中的字段

map-key说明此map的key定义。

one-to-many定义了一对多中的多字段。

 

五、数组 array

 

六、总结

使用Hibernate的时候,如果用到集合,绝大多数用set(配置简单)

现在Hibernate项目中一般很好使用关联关系和继承关系。

分享到:
评论

相关推荐

    hibernate关联映射实例

    本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...

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

    ### Hibernate关联映射的作用与常用属性详解 #### 关联映射概述 在对象关系映射(Object Relational Mapping,简称ORM)技术中,Hibernate作为Java领域内非常成熟且功能强大的框架之一,它允许开发者将Java类映射...

    Hibernate集合映射与关联关系

    本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合关系"、"student与class的多对一"以及"一对多映射"的概念。 首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体...

    hibernate多对多关联映射

    总之,Hibernate的多对多关联映射是解决复杂关系数据库设计的关键技术之一。通过合理的配置和使用,开发者可以轻松管理实体之间的多对多关系,提高开发效率。理解并熟练掌握这部分知识对于提升Java企业级应用开发...

    [原]Hibernate集合映射

    《Hibernate集合映射详解》 Hibernate作为Java领域中的一款强大持久化框架,其核心功能之一就是对象关系映射(ORM),使得开发者可以方便地在Java对象与数据库表之间进行交互。其中,集合映射是Hibernate中非常关键...

    hibernate 全面学习->hibernate 关联映射学习

    总的来说,这个压缩包提供了丰富的Hibernate关联映射的学习资源,涵盖了从基础到进阶的各种关联类型。通过学习这些示例,你将能够熟练掌握如何在Java项目中使用Hibernate进行数据持久化,并灵活地处理各种数据库关系...

    hibernate集合的映射

    在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...

    hibernate map 集合映射

    在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便更好地管理和操作数据。这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行...

    Hibernate 关联映射

    这可能是测试Hibernate关联映射的一个示例项目或者类。通常,这样的测试会包含各种关联映射的实例,如实体类的定义,配置文件或注解,以及测试用例,用于验证关联映射是否按预期工作。 **详细知识讲解:** 1. **一...

    Hibernate3.x关联映射示例

    关联映射是Hibernate中的核心概念之一,它允许我们将数据库中的表关系映射到对象之间的关系。主要的关联类型有以下几种: 1. **一对一(One-to-One)关联**:一个实体对应另一个实体的唯一实例。在数据库中,通常...

    hibernate的关联映射

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

    hibernate set 集合映射

    在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象模型中的集合类,如List、Set、Map等。这允许我们在Java代码中操作对象集合,而Hibernate负责处理底层的SQL查询和数据存储。本文将深入探讨`...

    Hibernate关联映射.doc

    ### Hibernate关联映射详解 #### 一、单向多对一映射 在单向多对一的关系中,主要是指“多方”实体依赖于“一方”实体,但是“一方”实体并不感知到“多方”的存在。 1. **数据库设计:**在多方的表中添加与一方...

    hibernate关联映射

    **Hibernate关联映射详解** 在Java的持久化框架中,Hibernate是一个非常强大的工具,它使得开发者可以更加方便地处理数据库操作。其中,关联映射是Hibernate的核心特性之一,它允许我们将对象模型与关系数据库模型...

    hibernate关联关系映射

    "hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...

    Hibernate映射集合属性List

    在Java持久化框架Hibernate中,映射集合属性是常见的需求,特别是对于那些具有一对多、多对多关系的实体对象。这里的"List"是Java集合框架中的一个接口,用于存储一组有序的元素,而在Hibernate中,它常用来映射...

    Hibernate常见集合映射(Set,List_Array,Map,Bag)

    Hibernate 集合映射详解 Hibernate 是一个流行的Java持久化框架,它提供了多种集合映射类型,以满足不同的业务需求。在 Hibernate 中,集合映射是指将 Java 集合类型与数据库表之间的映射关系。常见的集合映射类型...

    Hibernate数据关联映射与继承策略

    **Hibernate数据关联映射** Hibernate 是一款强大的Java对象关系映射(ORM)框架,它允许开发者将数据库操作转化为对Java对象的操作,简化了数据库编程。在 Hibernate 中,数据关联映射是实现对象与数据库表之间...

    Hibernate集合映射

    综上所述,Hibernate集合映射是将Java集合类与数据库表关联的关键机制,涵盖了从一对一、一对多到多对多的各种关系映射。理解并熟练掌握这些映射方式,能够帮助开发者更好地设计和实现数据持久化层,提高代码的可...

Global site tag (gtag.js) - Google Analytics