- 浏览: 1240166 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
Hibernate单端关联懒加载策略:即在<one-to-one>/<many-to-one>标签上可以配置 懒加载策略。 可以取值为:false/proxy/no-proxy false:取消懒加载策略,即在加载对象的同时,发出查询语句,加载其关联对象 proxy:这是hibernate对单端关联的默认懒加载策略,即只有在调用到其关联对象的方法的时候 才真正发出查询语句查询其对象数据,其关联对象是代理类 no-proxy:这种懒加载特性需要对类进行增强,使用no-proxy,其关联对象不是代理类 注意:在class标签上配置的lazy属性不会影响到关联对象!!!
如下例以多对一为例:
package com.bjsxt.hibernate; public class Group { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.bjsxt.hibernate; import java.util.Date; public class User { private int id; private String name; private Group group; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } }
Group.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> <class name="com.bjsxt.hibernate.Group" table="t_group"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
User.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> <class name="com.bjsxt.hibernate.User" table="t_user" > <id name="id"> <generator class="native"/> </id> <property name="name"/> <!-- <many-to-one name="group" column="relatedGroup" /> --> <many-to-one name="group" column="relatedGroup"/> </class> </hibernate-mapping>
生成数据:
package com.bjsxt.hibernate; import org.hibernate.Session; public class InitData { public static void main(String[] args) { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Group group = new Group(); group.setName("java开发组"); //将group转换为持久对对象 session.save(group); for (int i = 0; i < 10 ; i++) { User user = new User(); user.setName("User_" + i); //建立对象之间的关系 user.setGroup(group); //因为group为持久对象,所以可以成功保存 session.save(user); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
测试类:
package com.bjsxt.hibernate; import org.hibernate.Session; import junit.framework.TestCase; /** * 所有lazy的属性默认 * @author Administrator * */ public class SingleEndTest1 extends TestCase { public void testLoadUser() { Session session = null; try { session = HibernateUtils.getSession(); //不会发出查询sql User user = (User)session.load(User.class, 2); //会发出一条查询sql,转载数据到User System.out.println("user name=" + user.getName()); //不会发出查询sql Group group = user.getGroup(); //会发出一条查询sql,转载数据到Group System.out.println("related group=" + group.getName()); }catch(Exception e) { e.printStackTrace(); }finally { } } }
将<class>标签中的lazy设置为false
package com.bjsxt.hibernate; import org.hibernate.Session; import junit.framework.TestCase; /** * 将<class>标签中的lazy设置为false * @author Administrator * */ public class SingleEndTest2 extends TestCase { public void testLoadUser() { Session session = null; try { session = HibernateUtils.getSession(); //会发出一条查询sql,转载数据到User User user = (User)session.load(User.class, 2); //不会发出查询sql System.out.println("user name=" + user.getName()); //不会发出查询sql Group group = user.getGroup(); //会发出一条查询sql,转载数据到Group System.out.println("related group=" + group.getName()); }catch(Exception e) { e.printStackTrace(); }finally { } } }
保持<class>标签中的lazy默认设置, 将<many-to-one>标签中加入lazy=false
package com.bjsxt.hibernate; import org.hibernate.Session; import junit.framework.TestCase; /** * 保持<class>标签中的lazy默认设置 * 将<many-to-one>标签中加入lazy=false * @author Administrator * */ public class SingleEndTest3 extends TestCase { public void testLoadUser() { Session session = null; try { session = HibernateUtils.getSession(); //不会发出一条查询sql User user = (User)session.load(User.class, 2); //会发出查询sql,这里因为many-to-one设置了lazy=false所以这里会把group也加载过来,这里会发出两条SQL //Hibernate: select user0_.id as id0_0_, user0_.name as name0_0_, user0_.relatedGroup as relatedG3_0_0_ from t_user user0_ where user0_.id=? //Hibernate: select group0_.id as id1_0_, group0_.name as name1_0_ from t_group group0_ where group0_.id=? System.out.println("user name=" + user.getName()); //不会发出查询sql Group group = user.getGroup(); //前面一次性查出了数据,不再发出查询SQL System.out.println("related group=" + group.getName()); }catch(Exception e) { e.printStackTrace(); }finally { } } }
发表评论
-
Hibernate抓取策略二
2010-05-11 17:56 1085在Classes与Student一对多映射中,我们将Set里面 ... -
Hibernate抓取策略一
2010-05-11 16:29 1323抓取策略指多表关联查询的时候,Hibernate会发出多条sq ... -
Hibernate查询缓存
2010-05-11 01:15 1617二级缓存中,如果不设置“查询缓存”,那么hibernate只会 ... -
Hibernate所需完整类库
2010-05-11 01:08 891附件为最新配置Hibernate所需的包. 由来: 一、下 ... -
Hibernate 二级缓存缺少包出现的异常
2010-05-10 23:29 2338由于二级缓存使用的包org.hibernate.cache.E ... -
转:Hibernate性能优化之二级缓存
2010-05-10 17:28 1141http://chenhongbin007.blog.163. ... -
Hibernate lazy加载FOR Connection
2010-05-10 00:28 1198Hibernate集合属性的懒加载策略: 在集合属性上, ... -
Hibernate lazy加载FOR Class
2010-05-09 23:51 1057lazy策略可以用在: * <class>标签 ... -
Hibernate性能优化:二级缓存
2010-05-06 16:48 1070hibernate二级缓存 定义步骤: 1、打开缓存, ... -
Hibernate性能优化:一级缓存
2010-05-06 16:33 1125一级缓存与session周期一致,二级缓存与sessionFa ... -
Hibernate悲观锁与乐观锁及事务管理机制
2010-05-06 11:57 1197引用: 悲观锁与乐观锁: http://www.iteye ... -
Hibernate学习笔记博客
2010-05-06 11:32 725网上也有人自学hibernate的笔记 http://hi. ... -
Hibernate与EJB的区别
2010-05-05 18:09 877Hibernate不支持分布式应用 -
Hibernate对象状态
2010-05-05 17:48 1774Hibernate对象有三种状态: 瞬时状态(Transie ... -
Hibernate HQL示例十二:DML更新、删除及与Hibernate持久化更新
2010-05-05 16:42 1977DML更新及删除 示例: package com.bjsx ... -
Hibernate HQL示例十一:分页查询
2010-05-05 16:21 1142分页查询: select * from t_student ... -
Hibernate HQL示例十:统计查询
2010-05-05 15:57 2114统计函数的使用 count(*) 等 package co ... -
Hibernate HQL示例九:连接查询
2010-05-05 15:38 3539inner join left out join rig ... -
Hibernate HQL示例八:查询对象导航及Implicit Join
2010-05-05 10:32 1688通过Student对象导航到class对象的id 如下: ... -
Hibernate HQL示例七:查询过滤器的使用
2010-05-05 01:58 1329查询过滤器指的是:配置好后,会在该对象上的每一条查询语句上自动 ...
相关推荐
在压缩包文件“hibernate_lazy_for_single_end”中,可能包含了一些示例代码或测试用例,帮助读者理解并实践Hibernate的单端关联懒加载策略。这些文件可能包括实体类、映射文件、测试类等,通过实际操作展示如何配置...
4. 单端关联(One-to-one, many-to-one)的延迟加载:`<one-to-one>`和`<many-to-one>`元素的`lazy="proxy"`、`lazy="false"`或`lazy="noproxy"`可以控制关联对象的延迟加载行为。`lazy="proxy"`会在访问关联对象时...
`hibernate_lazy_for_single_end`可能涉及到了Hibernate的单端延迟加载。延迟加载是指关联对象在首次访问时才进行加载,而单端加载则是指只在一个方向上启用延迟加载,通常用于优化性能,避免不必要的数据库访问。 ...
5. **懒加载与急加载(Lazy Loading vs Eager Loading)**:Hibernate提供了两种加载关联对象的方式。懒加载默认不加载关联对象,只有在真正需要时才查询数据库;而急加载则会在加载主体对象时一起加载关联对象。...
取消延迟加载可以通过在映射文件中设置`lazy="false"`,例如对于集合属性和单端关联的实体。 3. 抓取策略(Fetch策略): - 对于单端关联(`<many-to-one>`, `<one-to-one>`),可以使用`fetch`属性控制加载方式...
这是HIBERNATE默认的抓取策略,当一个实体被加载时,与之关联的实体或集合并不会立即加载,而是采用延迟加载(Lazy Loading)的方式。当第一次访问关联实体或集合时,HIBERNATE会额外发送一条SELECT语句来抓取数据,...
在类级别上,如果设置 `lazy=false`,则在查询时会自动加载关联的对象;而在属性级别上,它控制单个属性的加载行为。 **级联操作(Cascade)** 级联操作定义了对一个实体的操作如何影响与其关联的实体。常见的级联...
19.1.3. 单端关联代理(Single-ended association proxies) 19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using ...
此外,还可以设置`fetch`策略(如LAZY或EAGER)来控制何时加载关联的集合。 **配置示例** 在Hibernate中,配置一对一和一对多关联通常涉及以下步骤: 1. 定义实体类:为每个数据库表创建对应的Java类,并添加属性...
19.1.3. 单端关联代理(Single-ended association proxies) 19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using ...
19.1.3. 单端关联代理(Single-ended association proxies) 19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using ...
19.1.3. 单端关联代理(Single-ended association proxies) 19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using ...
SSH延迟加载(Lazy Loading)是Java开发中Spring、Struts和Hibernate这三大框架结合使用时,Hibernate提供的一种优化数据加载的策略。它允许我们在需要的时候才加载关联的对象或集合,而不是在初始加载实体时就一并...
20.1.3. 单端关联代理(Single-ended association proxies) 20.1.4. 实例化集合和代理(Initializing collections and proxies) 20.1.5. 使用批量抓取(Using batch fetching) 20.1.6. 使用子查询抓取(Using ...
1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...
19.1.3. 单端关联代理(Single-ended association proxies) 19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using ...
19.1.3. 单端关联代理(Single-ended association proxies) 19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using ...
20.1.3. 单端关联代理(Single-ended association proxies) 20.1.4. 实例化集合和代理(Initializing collections and proxies) 20.1.5. 使用批量抓取(Using batch fetching) 20.1.6. 使用子查询抓取...
Hibernate-Annotations还包含了一些其他高级特性,如懒加载(Lazy Loading)、级联操作(Cascading)、事务管理等。懒加载允许只在真正需要时才加载关联的对象,从而优化性能。级联操作则允许在对一个对象进行操作...
目录 前言 1.... 2.... 1. 在Tomcat中快速上手 ... 1.1. 开始Hibernate之旅 1.2.... 1.3.... 1.4.... 1.5....2. Hibernate入门 ... 2.1.... 2.2. 第一部分 - 第一个Hibernate程序 ... 单端关联代理(Single-ended association proxies) ...