`
gaosililn
  • 浏览: 70238 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ssh学习:hibernate关系映射(3)

 
阅读更多

双向的一对多与多对一的关联关系:

1、双向的一对多的关联关系:

在双向的一对多的关联关系中,配置与单向的一对多的关联关系、双向的一对一关联关系也没有什么大的差别。在双向的一对多的关联关系中多的那一端与单向的一对多关联关系设置配置一致;但是在少的那一端呢?

在持久化对象中需要引用多的那一端的对象,在Xxx.hbm.xml中添加<many-to-one></many-to-one>标签;还需在该标签中添加name属性与column属性。name属性的值为引用对象的属性名;column值为外键的字段名

实例:在上面的单向一对多的关联关系中进行修改:

少的一端:不变

多的一端:

Java持久化对象实体:

               public class Order {
			private int id;
			private String orderNum;
			private Date orderTime;
			private Account account;//引用少的那一端对象
			//省去get/set方法
		}

 

Xxx.hbm.xml配置:

<hibernate-mapping>
			<class name="com.usc.geowind.lilin.bean.oneToMany.Order" table="Order">
				<!-- type指明当前字段的类型    name对应实体中的属性名 -->
				<id type="integer" name="id">
					<!-- 提供ID自增的策略  native会根据数据库自行判断 -->
					<generator class="native"/>
				</id>
				<property name="orderNum" type="string"></property>
				<property name="orderTime" type="timestamp"></property>
				<!-- 在双向的一对多的关系中,在多的一端添加该标签
				name值为Java文件中少的一端对象的属性名,column为外键名,与另外的一端的xml文件配置中的外键一致 -->
				<many-to-one name="account" column="acc_id"></many-to-one>
			</class>
		</hibernate-mapping>

 

 

值得注意的是:在添加数据的时候,添加多的一还是添加一的一端在效率上是有区别的:先添加多的一端,会先添加非外键的字段的值,在添加完一的一端时候,再回去通过Update语句去修改外键的值。而先添加一的那一端,再去添加多的一端时候,外键也会一起添加,从而不需要再去再次通过update语句修改多的那一端对应的数据库表中的外键的值。在需要考虑执行效率的时候,需要慎重选择数据添加方式。

亦可以在一端的Xxx.hbm.xml中的集合标签中添加inverse属性来选择是否实现控制权翻转。当inverse的值设置为true时候,控制权会调换多的一端,这样不会影响查询等操作。但是呢,在数据记录初始化,先插入多的一端,会导致多的一端你的数据库表中的相对应的外键为null,即是一对多的关联关系权维护不在一的那一端,二十在多的那端。这是我们则需要先添加一的那一端的数据记录。

实例:

<!-- inverse属性是是否调换关系维护的控制翻转权,即关系维护权是否交给另外一端 -->

       

	<set name="" inverse="false">
       		<key column=""></key>
       		<one-to-many class=""/>
       	</set>

 

 

 

级联:

在数据的一端发生变化,另外一端跟着变化。在集合标签中设置属性Cascade。例如:

<set name="" inverse="false" cascade="all">
       		<key column=""></key>
       		<one-to-many class=""/>
       	</set>

 

在inverse="true" cascade="all"两属性一起使用时,级联关系须有,但是能起级联操作的只有在delete中

Cascade属性的取值有:

1、none:忽略其他关联的对象,默认值,无需设定。2、save-update:当session通过save(),update(),saveOrUpdate()方法来保存或更新对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象。

3、persist:当session通过persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象。

4、merge:通过Session的merge()方法来保存当前对象时,会级联融合所有关联的游离对象。

5、delete:通过delete()删除当前对象时,会级联删除所有关联的对象。

6、lock:通过lock()把当前游离对象加入session缓存时,会把所有的游离对象也加入Session缓存中。

7、replicate:通过replicate()复制当前对象时,会级联复制所有关联的对象。

8、evict:通过evict()清除session缓存中对象时,会级联清除所有关联的对象。

9、refresh:通过refresh()刷新当前对象时,会级联刷新所有关联的对象。(刷新是指同步更新session缓存中数据)

10、all:save-update(),persist(),merge(),delete(),lock(),replicate(),evict()及refresh()的行为。

11、delete-orphan,删除所有和当前对象时,解除关联行为的对象。

12、all-delete-orphan; 通过delete()删除当前对象时,会级联删除所有关联的对象。

分享到:
评论

相关推荐

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

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

    hibernate关联映射实例

    该资源包含了一些常用的hibernate关联映射实例。包括一对多,多对多,继承映射,等,是学习hibernate的必备品

    02 SSH 尚硅谷Hibernate 4视频教程

    教程视频:Hibernate是一个开放源代码的对象关系映射框架

    Hibernate教程PPT

    Hibernate教程PPT;Hibernate教程 SSH ORM 对象-关系映射 HQL查询;Hibernate教程 SSH ORM 对象-关系映射 HQL查询

    SSH的集成小案例-关系映射

    ssh集成的小例子 涉及到Hibernate的关系映射,和增删改查的一些方法 (应用了MyEclipse 和SQL Server 2005)

    Hibernate映射配置详解

    Hibernate映射配置详解

    SSH--Hibernate详解

    详细概述了Hibernate(ORM原理,核心配置,映射配置,一对一,一对多,多对多的关联关系)

    hibernate 映射关系

    hibernate 映射关系简单实例 、一对一 、一对多、多对一 、多对多

    struts2+hibernate+spring(ssh)博客项目完整版

    s2sh博客项目,JSP采用JSTL,struts标签包含源码与程序截图,采用Junite进行单元测试,后台包含博文管理,博文分类管理,用户管理...扩展性良好,可自定义添加自己的模块(注:看hibernate映射文件就知道数据库的结构)

    hibernate核心,一对多,多对多映射讲解,看了就完全搞明白了

    hibernate核心,一对多,多对多映射讲解,看了就完全搞明白了

    SSH2(spring3.2+strust2.3.4+hibernate4.2)框架演示代码

    Hibernate是一个对象关系映射(ORM)框架,用于将Java对象映射到关系数据库中的表。 以下是一个SSH2框架演示代码的资源描述: 项目结构 Web层(Struts2) struts.xml:Struts2的配置文件,定义Action和Result等。...

    SSH框架整合中hibernate框架所需要的配置文件

    该资源总包括SSH框架整合中hibernate框架所需要的配置文件: (1)hibernate.cfg.xml (2)在JavaBean所在的包下映射的配置文件

    SSH 项目框架搭建总结

    hibernate:使用hibernate的jar包 jstl:java的标准标签库 junit:测试用到的jar包 spring:使用spring的jar包 struts2:使用struts2的jar包 * 项目体系分层: cn.itcast.elec.containner:自定义的spring容器,...

    SSH框架实现BBS完整版

    4.4 Hibernate映射建表 4.5 配置Spring(AOP) 4.6 配置Spring(IOC) 4.7 大致分析业务逻辑定义部分Dao实现 4.8 测试Dao实现 4.9 分析JSP中要实现的功能在实体中建立实体方法 4.10 建立Struts2映射路径 4.11 分析...

    struts2+spring+hibernate整合示例

    1 首先整合spring和hibernate,这次我们在spring 中配置bean使用注解的方式 ,hibernate实体映射关系也使用注解的方式,配置完毕后用简单方法测试下hibernate是否整合成功。 a 加入支持:添加 spring核心包、...

    php-ssh-master面向对象的SSH包装库.zip

    SSH从头到尾都是围绕着一个中心建立的:面向对象。 Hibernate是作为一种对象持久化手段而存在的。所谓的O/R MAPPING其实就是持久化。因为对象与关系只不过是一个个体与集合的关系,本质上并不存在冲突。不需要...

    ssh(structs,spring,hibernate)框架中的上传下载

    Tfile的Hibernate映射文件Tfile.hbm.xml放在Tfile .java类文件的相同目录下:  代码 2 领域对象映射文件 1. 2. !DOCTYPE hibernate-mapping PUBLIC 3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4. ...

    java大作业基于SSH框架的学生成绩管理系统源码.zip

    5、 生成Hibernate所需的POJO类和映射文件 6、 开发DAO层 ​ (1) 新建DAO层接口。 ​ (2) 新建DAO层实现类(该类要实现DAO层接口,继承HibernateDaoSupport类)。 ​ (3) 在Spring配置文件中增加该DAO层...

    移动ssh项目(struts+spring+hibernate+oracle)130222.rar

    Hibernate则是项目中的ORM(对象关系映射)解决方案,它将Java对象映射到Oracle数据库表中,极大地简化了数据访问层的代码编写,并提高了开发效率。Oracle数据库作为一个强大的关系型数据库管理系统,提供了高性能的...

    Web开发+java+ssh框架

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

Global site tag (gtag.js) - Google Analytics