hibernate级联的3个属性

本文探讨了级联和延时装载的概念及其在Hibernate中的应用。级联用于确保主控表与关联表间数据的一致性,而延时装载则通过按需加载关联数据来提高系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.lwbst.com/viewAction.do?lunwenid=866

cascade(级联)

级联在编程中经常接触,写过触发器来修改或删除关联表相记录的一定会知道,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。比如一个employee存放职员信息,一个 timecard存放职员的考勤信息,当从职员表中删除一个职员时,timecard表中对应的考勤信息 已经没有意义,因为其所属的职员已不存在,如果继续留在timecard表中就成了没用的也称脏数据。 理想的做法是在删除职员信息的同时将该职员信息对应的考勤信息也删除。在hibernate中如果要达到这个 效果只需要设置cascade属性值即可。当然是否进行级联关系要根据实际情况慎重考虑。

inverse(反转)

表与表之间的关联,我们通常将主动发起关联请求的表称为主动表,被关联的表成为被动表,hibernate中 将此概念冠以在表所对应的对象上,因此将主动发起关联请求的对象称为主动对象或主控对象,被关联的对象 称为被动对象或被控对象。hibernate由主动对象维护关联关系,在实际中经常碰到一个对象的关联角色并不 那么明确,如双向关联,这时inverse值用来标明由谁来维护关联关系。设为true时反转控制角色,即由该 属性关联的对象维护关联关系。

 Lazy Loading(延时装载)

延时装载主要是从性能方面的考虑,对于 “select coulmn1 from table”和“select * from table”语句 的性能比较,相信大家不会有异议,第一条的执行性能要高于第二条,当然这个表中字段存储的信息应该能充分 体现出优越性为前提,比如说一个employee表中存放有,职员姓名、年龄、照片等,如果只需要查看姓名和年龄, 那么照片信息就不应该附带出来。表与表之间的关联也应如此,如果不需要用到关联表中的数据就不应该去进行关 联操作,或在需要的时候才启动关联操作。让数据在最恰当的时候才出现,这就是延时装载。  

### 关于Hibernate框架中实现跨多个数据库进行级联查询 在处理复杂的分布式应用时,可能会遇到需要跨越多个不同数据库表之间建立关系并执行级联操作的情况。对于Hibernate而言,默认情况下并不支持直接配置用于连接两个独立数据库之间的实体关联[^1]。 然而,在某些场景下可以通过一些间接方法来达成目的: #### 方法一:利用中间件或服务层集成 创建专门的服务组件负责协调来自各个数据源的信息交换工作。具体来说就是在应用程序内部定义一套逻辑流程,先访问第一个DB获取所需对象实例后再基于此去第二个DB里寻找相关记录完成整个链条上的加载过程[^2]。 #### 方法二:采用联合模式(JTA) 如果企业版环境允许的话,则可以考虑引入Java事务API (JTA),它能够使程序在一个全局性的事务边界内同时操控多份持久化单元(Persistence Unit)所对应的资源管理者(Resource Manager)[^3]。这意味着可以在一次提交动作里面同步影响到几个不同的RDBMS里的表格结构及其内容变化情况;不过需要注意的是这样做会增加系统的复杂度以及潜在的风险因素。 #### 示例代码展示如何设置单个数据库内的级联属性(非跨库) 虽然上述方案解决了跨库问题,但对于理解基本概念还是有必要了解常规做法: ```xml <hibernate-mapping> <class name="com.hibernate.Classes" table="t_classes"> <!-- 配置主键 --> <id name="id"> <generator class="native"/> </id> <!-- 定义字段映射 --> <property name="name"/> <!-- 设置集合类型的属性,并指定其与Student类的一对多关系 --> <set name="students"> <key column="classesid"></key> <one-to-many class="com.hibernate.Student"/> <!-- 添加cascade属性以启用特定类型的级联行为 --> <cascade type="all-delete-orphan"/> </set> </class> </hibernate-mapping> ``` 以上XML片段仅适用于单一数据库环境中描述`Classes`和`Students`间的父子关系及相应的级联规则[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值