- 浏览: 1588028 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
来源:http://www.tianxiaboke.com/u/lyeerwy
级联保存和更新
当Hibernate持久化一个临时对象时,在默认情下,他不会自动持久化所关联的其他临时对象,如果希望当持久化对象时把他所关联的所有临时对象进行持久化的话:可以把 的cascade属性设置为"save-update" ,cascade的默认属性值为none。
cascade:设置操作对象时的级联操作,即层级之间的连锁操作
值 save-update :表示当保存和更新当前对象(即insert和update语句时),会级联保存和更新与他关联的对象
值 all :表示任何情况下都会进行级联操作,即对一个对象进行操作,也会对和他关联的其他对象进行同样的操作
值 delete :表示在执行delete时,进行级联操作,删除和他关联的对象
值 none :表示任何情况下,都不会进行级联操作
<set>元素的inverse属性
在运行上面的程序时,如果hibernate的"show-sql"设置为true时,就会看到Hibernate会生成很多sql语句,其实很多sql语句都是重复的
eg:
insert into test.order(o_name,c_id)values(?,?)
insert into test.order(o_name,c_id)values(?,?)
insert into test order set c_id=? where id=?
insert into test order set c_id=? where id=?
为了解决这个问题,我们可以利用在<set>标签中加上inverse属性。术语:inverse是指反转的意思,在Hibernate中,表示关联关系中的方向关联关系中,inverse="false"的主控方,由主动方负责维护对象关系我们 在customer对象的对象配置文件中加上
<set name="orders" cascade="save-update" inverse="true">
<key column="c_id" > </key>
<one-to-many class="net.mbs.mypack.Order " />
</set>
声明在Customer和Order的双向关联关系中,Customer端的关联只是Order端关联的镜象(即Order端是主空端,负责维护Customer和order对象之间的关联关系),当hibernate探测到持久化对象Customer或Order的状态发生变化时(主要是关联关系的改变),仅按照Order对象的状态的变化来同步更新数据库。
按次配置,如果在程序中,我们仅仅使用Customer.getOrder().add(order)(涉及了和Order的关联关系的改变),是不能让数据库跟对象的变化来进行数据库同步更新的,只有利用Order对象的方法改变的Order对象状态(eg:order.setCustomer(customer)----涉及到了和Customer的关联关系的改变)时,数据库才会根据变化来同步更新数据库,即只有主控方的状态(涉及到了和另一方面的关联关系的改变)发生了变化后,才会触发对象和数据库的同步更新。
映射一对多双向关联关系
当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象或一组与他关联的对象当中,根据上面的程序,对于一个给定的Order对象,如果想获取与他关联的Customer对象,我们只需要调用入下方法:
Customer c=order.geCustomer(); 那么当我们得到一个Customer对象后,想查出和这个Customer对象关联的所有Order对象时,应该怎么办呢?由于在Customer中没有建立对Order对象的关联,所以,不能通过加载Customer对象来自动加载和他关联的所有Order对象,唯一的方法只能通过JDBC或SQL语言人工写出代码来查询数据库Order表来返回所需要的信息(这里好像不对,若配置了双向一对多,可以在一方使用getSet或是getList取得数据的)
上面的问题虽然解决,但不能算是最好,因为这样性能会有所下降,对象位于内存中,在内存中从一个对象导航到另一个对象显然比到数据库中查询数据要快得多
具体实现<br>
1:由于Customer和Order是一对多,即一个Customer要对应多个Order,所以在Customer中应该建立一个Set对象,用于存放和本Customer对象关联的所有Order对象。
2:在customer.hbm.xml通过<one-to-many>建立对Order表的关联关系
注意:<one-to-many>应该放置在<set>标签中
我们先来看看Customer类的设计和customer.hbm.xml文件的内容
<br><br><br>------------------------------------------------------
Customer Order 双向一对多
1:Customer类中建立一个容器对象,包含关联的所有Order对象
2:Order类中建立一个Customer对象,关联Customer
inverse="true"表示将维护关联的权利交给引起Hibernate语句的生成
customer.getOrders().add(order);
customer.setName("dddddd");
inverse="true"(设置此属性的一方----是被控方)
当主控方修改对象之间的关联关系时,让Hibernate生成sql语句
发表评论
-
Hibernate通过配置文件自动生成数据库表
2014-03-25 16:57 4432Hibernate支持自动建表,在开发阶段很方便,可以保证h ... -
JDBC常用面试题整理(转)
2014-03-20 14:14 2028转自:http://it.deepinmind.com ... -
Hibernate使用get(id)获得的对象进行更改会在事务提交时持久化到数据库中(即使不用update和merge方法)
2013-09-24 20:35 5022今天同事发现个问题, ... -
Hibernate对象的三种状态以及各种方法的不同之处(如save和persist等)
2013-09-24 20:27 845三种状态的转换: hibernate的状 ... -
Spring事务传播机制(即事务类型)和隔离级别
2013-06-24 17:52 25931 事务的传播属性(Propagation) 1) REQU ... -
Hibernate中HQL函数汇总及其说明
2013-06-24 17:39 1458Criteria查询对查询条件 ... -
hibernate里createSQLQuery的addEntity()和setResultTransformer()方法
2013-06-07 17:22 1590今天看到同事写的一个方法,就是用List<ProObj ... -
Hibernate 中Query的list方法和iterate方法
2013-06-07 16:31 792Hibernate中用hql通过query ... -
使用SVN检出Struts Spring Hibernate源码
2013-02-05 16:50 1357Spring Spring源码是由springframewo ... -
hibernate缓存机制
2012-08-16 17:32 10671. Cache简介: 缓存(Cache )是计算机领 ... -
JDBC事物处理(Spring和Hibernate事物的底层实现,帮助你理解一些配置的参数的意义)
2012-08-01 14:59 1332jdbc中的事务处理 2008-11 ... -
hibernate多对多中间表问题
2012-07-09 18:50 1720hibernate 多对多 中间表ID生成方式 定稿 其 ... -
hibernate级联删除不起作用(做项目时遇到的问题)
2012-07-06 13:46 1915昨天在项目中遇到一个Hibernate双边多对一的问题,想在d ... -
getHibernateTemplate().execute(new HibernateCallback())方法
2012-07-05 19:21 19881. HibernateCallback是一个接口,该接口只有 ... -
hibernate hbm转换Java|级联等概念介绍|级联删除
2012-07-05 08:52 17634.4.3. 根据映射对象生成映射文件上节提到了用hbm2ja ...
相关推荐
一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...
在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...
在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...
在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者...理解`cascade`和`inverse`的概念,能够帮助我们更好地设计对象模型,避免数据同步的问题,同时,灵活运用级联操作可以简化业务逻辑。
**Hibernate 核心类介绍** - **Configuration**:读取配置文件并解析 `.hbm.xml`,生成 PersistentClass 和 Collection。 - **PersistentClass**:表示要持久化的类的信息,包括其属性列表(Property)和每个属性的 ...
总结,本教程详细介绍了Hibernate中表关系的映射,包括不同关系的配置、`Cascade`和`Inverse`属性的使用,以及如何在Java类和XML配置文件中实现这些映射。理解并掌握这些概念对于高效使用Hibernate进行数据库操作至...
使用`<set>`标签定义多对多关系,包括中间表名、延迟加载、级联操作和反转标志(`inverse`)。 7. 延迟加载(Lazy Loading): 默认情况下,Hibernate使用懒加载来提高性能,只在真正需要时才加载关联的对象。 8....
可以通过`inverse`属性反转维护责任,使一的一方负责外键的更新。 **四、在web系统中的应用** 在实际的web系统中,"多对一"关系映射常用于构建复杂的业务逻辑。例如,用户订单和商品的关系,一个订单可能包含多个...
- `inverse` 设置是否反转该关联关系。 - `cascade` 定义级联行为。 - `lazy` 控制延迟加载机制。 - `<key>` 元素定义外键。 - `<one-to-many>` 元素指定集合中的元素类型。 #### 五、API操作 利用Hibernate API...
本文档旨在总结和解释Hibernate中的多种关联模式及其配置方式,同时也会介绍在不同数据库环境下(如MySQL和Oracle)的连接配置方法。 #### 二、数据库连接配置 ##### MySQL数据库配置示例 ```xml ...
- **cascade**:可选属性,表示级联操作。 - **order-by**:可选属性,默认为无,表示排序依据。 - **where**:可选属性,默认为无,表示过滤条件。 - **batch-size**:可选属性,表示批处理大小。 - **outer-join**...
- **cascade**:级联操作,当一个对象被持久化时,关联的对象也会被自动持久化。 - **inverse**:反转控制,用于指定关联关系的维护方。 - **LazyLoading**:延迟加载,只有当真正需要时才加载关联对象。 ##### 4.6...
- 在一对多的配置中,`cascade`属性可以用来指定级联操作,例如`cascade="all"`表示级联所有操作(如保存、更新、删除等)。 ### 结论 以上知识点覆盖了Spring框架的基本概念及其与Hibernate、Struts等技术的集成...
- 级联操作:通过`cascade`属性设置级联行为,例如`cascade="all"`表示所有操作都级联。 - 延迟加载:通过`lazy="true"`属性开启延迟加载模式。 - **示例代码**: ```xml <set name="orders" cascade=...
4. **cascade**:级联操作指一个对象的改变会影响到与其相关联的对象,例如删除一个父对象时,可能会同时删除所有子对象。 5. **inverse**:反转关系意味着在一个双向关联中,指定哪个端负责维护关联关系。 6. **...
- **Hibernate的inverse、cascade、fetch、lazy**:这些是Hibernate的持久化策略,inverse用于管理关联关系的维护,cascade控制操作的级联,fetch决定加载关联数据的方式,lazy是懒加载策略。 这些知识点都是Java...
6. **Inverse反转**:通常与双向关联关系中的维护者有关,决定哪一方负责关联的维护。 7. **Employee雇员**:租房系统中的用户角色之一,可能涉及到租户或物业管理人员。 8. **Project项目**:可能指代具体的租房...
- **cascade**:级联操作。 5. **Hibernate中的延迟加载** - **概念**:在真正需要时才加载关联对象。 - **用途**:提高性能,减少内存占用。 6. **Hibernate缓存机制** - **一级缓存**:会话级别的缓存,...