- 浏览: 5826156 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
hibernate lazy策略可以使用在:
* <class>标签上,可以取值:true/false
* <property>标签上,可以取值:true/false需要类增强工具
* <set><list>标签上,可以取值:true/false/extra
* <one-to-one><many-to-one>单端关联上,可以取值:false/proxy/noproxy
lazy概念:只有真正使用该对象时,才会创建,对于hibernate而言,正真使用的时候才会发出sql
hibernate支持lazy策略只有在session打开状态下有效
<class>标签上的lazy特性只对普通属性起作用
集合上的lazy策略
hibernate在集合上的lazy策略,可以取值:true/false/extra
<class>标签上的lazy不会影响到集合上的lazy特性
设置集合上的lazy=false,其它默认
设置集合上的lazy=extra(推荐),其它默认
单端关联上的lazy策略
* <class>标签上,可以取值:true/false
* <property>标签上,可以取值:true/false需要类增强工具
* <set><list>标签上,可以取值:true/false/extra
* <one-to-one><many-to-one>单端关联上,可以取值:false/proxy/noproxy
lazy概念:只有真正使用该对象时,才会创建,对于hibernate而言,正真使用的时候才会发出sql
hibernate支持lazy策略只有在session打开状态下有效
<class>标签上的lazy特性只对普通属性起作用
集合上的lazy策略
import org.hibernate.Session; import junit.framework.TestCase; /** * 运行本单元测试的条件: * * 设置<class>标签上的lazy=true,也就是默认配置 * * @author Administrator * */ public class ClassLazyTest extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Group group = (Group)session.load(Group.class, 1); //不会发出sql System.out.println("group.id=" + group.getId()); //会发出sql System.out.println("group.name=" + group.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad2() { Session session = null; Group group = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); group = (Group)session.load(Group.class, 1); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } //不能正确输出,抛出LazyInitializationException 异常,因为session已经关闭 //hibernate支持lazy策略只有在session打开状态下有效 //在Spring中设置openSessionInViewFilter可以解决这个问题。 System.out.println("group.name=" + group.getName()); } }
hibernate在集合上的lazy策略,可以取值:true/false/extra
<class>标签上的lazy不会影响到集合上的lazy特性
import java.util.HashSet; import java.util.Iterator; import java.util.Set; import junit.framework.TestCase; import org.hibernate.Session; /** * 保持lazy默认 * @author Administrator * */ public class CellectionlazyTest1 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println("student.name=" + student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql,发出查询全部数据的sql System.out.println("student.count=" + students.size()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
设置集合上的lazy=false,其它默认
import java.util.HashSet; import java.util.Iterator; import java.util.Set; import junit.framework.TestCase; import org.hibernate.Session; /** * 设置集合上的lazy=false,其它默认 * @author Administrator * */ public class CellectionlazyTest3 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql,会发出两条sql分别加载Classes和Student System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //不会发出sql for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println("student.name=" + student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql,会发出两条sql分别加载Classes和Student System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //不会发出sql System.out.println("student.count=" + students.size()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
设置集合上的lazy=extra(推荐),其它默认
import java.util.HashSet; import java.util.Iterator; import java.util.Set; import junit.framework.TestCase; import org.hibernate.Session; /** * 设置集合上的lazy=extra,其它默认 * @author Administrator * */ public class CellectionlazyTest4 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println("student.name=" + student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql,发出一条比较智能的sql System.out.println("student.count=" + students.size()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
单端关联上的lazy策略
import org.hibernate.Session; import junit.framework.TestCase; /** * 所有lazy属性默认 * @author Administrator * */ public class SingleEndTest1 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql User user = (User)session.load(User.class, 1); //会发出sql System.out.println("user.name=" + user.getName()); //不会发出sql Group group = user.getGroup(); //会发出sql System.out.println("group.name=" + group.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
import org.hibernate.Session; import junit.framework.TestCase; /** * 将<many-to-one>中的lazy设置为false,其它默认 * @author Administrator * */ public class SingleEndTest2 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql User user = (User)session.load(User.class, 1); //会发出sql,发出两条sql分别加载User和Group System.out.println("user.name=" + user.getName()); //不会发出sql Group group = user.getGroup(); //不会发出sql System.out.println("group.name=" + group.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
import org.hibernate.Session; import junit.framework.TestCase; /** * <class>标签上的lazy=false,其它默认 * @author Administrator * */ public class SingleEndTest3 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //会发出sql User user = (User)session.load(User.class, 1); //不会发出sql System.out.println("user.name=" + user.getName()); //不会发出sql Group group = user.getGroup(); //会发出sql System.out.println("group.name=" + group.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
发表评论
-
DetachedCriteria查询实例
2010-07-20 15:52 2114项目中用到了DetachedCriteria,顺便记下来 De ... -
hibernate学习13之悲观锁与乐观锁
2010-01-28 11:55 2012悲观锁Pessimistic 悲观锁 ... -
hibernate学习12之Collection(集合)映射
2010-01-28 11:09 2017set list array map 的映射。 集合映射会发 ... -
hibernate学习11之composite(复合)主键映射
2010-01-28 10:50 2200复合主键映射可以看作是组件映射的一个特例. <!D ... -
hibernate学习10之component(组件)映射
2010-01-28 10:34 1847在hibernate中,component是某个实体的逻辑组成 ... -
hibernate学习9之extends(继承)映射
2010-01-28 10:19 3021hibernate.cfg.xml: <!DOCTY ... -
hibernate学习7之many-to-many双向关联
2010-01-27 16:54 1869Hibernate.cfg.xml配置同前一节。 imp ... -
hibernate学习6之many-to-many单向关联
2010-01-27 16:40 2438<!DOCTYPE hibernate-config ... -
hibernate学习5之one-to-many双向关联
2010-01-27 16:10 2319一对多双向关联映射: * 在一一端的集合上使用<key ... -
hibernate学习4之one-to-many单向关联(不推荐)
2010-01-27 15:47 4792一对多和多对一的映射策略是一样的,只是站的角度不同. 多对一 ... -
hibernate学习3之one-to-one单向外键关联
2010-01-27 14:55 3112one-to-one关联其实是many-to-one的一种特殊 ... -
hibernate学习2之many-to-one
2010-01-27 14:37 1897public class Group { privat ... -
hibernate学习1之基础工具
2010-01-27 14:21 1802//根据映射文件生成数据库表 import org.hib ... -
Hibernate批量删除出现sql异常Connection is read-only. Queries leading ... are not allowed
2009-12-23 17:48 9153在做批量删除时出现: Connection is read- ... -
PaginationSupport加强版的分页代码
2009-09-21 13:04 4979PaginationSupport.java,这个类网上有,我 ... -
根据用户权限,动态显示用户菜单
2009-09-17 14:48 9899用户权限userPermission,比如[1][2][3][ ... -
数据插入不成功的问题
2009-09-03 13:25 1802检查表的字段名中是否有sql关键字,如use,count,ma ... -
Hibernate的批量更新和删除
2009-08-16 22:03 2142批量更新是指在一个事 ... -
利用myeclipse 生成Hibernate Mapping文件时出现No entries available的解决办法
2009-07-30 23:26 16798在hibernate中,每个数据表对应的其实是一个实体类,每个 ...
相关推荐
标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合类(如List、Set等)的懒加载。这篇文章可能详细解释了Hibernate在集合懒加载方面的实现方式以及其背后的原理。 懒加载的主要目的是...
在这个场景中,我们关注的是"hibernate的lazy策略forClass",这涉及到如何对类的属性进行懒加载配置。 首先,我们需要理解Hibernate中的实体类(Entity)。在Hibernate中,一个Java类可以被映射为数据库中的一个表...
【hibernate学习资料大全】 Hibernate 是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。...希望这些资料能对CSDN的网友们在Hibernate学习之路上提供宝贵的帮助。
**Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系...通过实践和深入学习,你可以更好地利用 Hibernate 实现高效、可靠的数据库应用。
这是HIBERNATE默认的抓取策略,当一个实体被加载时,与之关联的实体或集合并不会立即加载,而是采用延迟加载(Lazy Loading)的方式。当第一次访问关联实体或集合时,HIBERNATE会额外发送一条SELECT语句来抓取数据,...
10. **懒加载(Lazy Loading)**:一种优化策略,只有当实际需要访问关联对象时,才会执行数据库查询,避免了无谓的性能开销。 11. **事件监听器(Event Listeners)**:允许自定义逻辑在特定的生命周期事件(如...
源码包中的各个文件代表了Hibernate学习的不同阶段,如Hibernate10_0603、Hibernate8_0601等,这些命名可能表示不同的学习日期或版本。每个文件夹内通常会包含配置文件(如hibernate.cfg.xml)、实体类(Entity)、...
3. **配置文件(hibernate.cfg.xml)**:这是Hibernate的主配置文件,包含了数据库连接信息、方言设置、缓存策略等关键配置。 4. **会话(Session)**:Session是Hibernate与数据库交互的主要接口,负责管理对象的...
本篇学习笔记将深入探讨Hibernate3.2的核心概念,包括环境搭建、主要接口、映射方式以及性能优化策略。 首先,让我们从搭建Hibernate3.2开发环境开始。在创建一个新的Java项目后,我们需要添加必要的库文件,主要...
### J2EE系统之-hibernate学习总结 #### 对象持久化理论 - **对象持久化定义**:将对象中的数据转换存储至外部持久性存储设备的过程,如数据库、磁盘等。 - **对象持久化的原因**: - 内存易失性:断电后数据丢失...
get 和 load 方法的区别在于对懒加载(lazy loading)的支持,get 直接加载数据,而 load 支持延迟加载。如果 get 无法找到数据,则返回 null;load 则会抛出异常。 transient 状态的特征是数据库中没有对应记录,...
学习Hibernate3.3,需要关注性能优化技巧,例如延迟加载(Lazy Loading)、批处理(Batch Processing)、结果集缓存(Result Set Caching)、预加载(Preloading)等。理解并适时应用这些技术,可以在保证应用功能的...
在这个“Hibernate中文参考文档学习”中,我们可以深入理解Hibernate的核心概念、配置、实体映射、查询语言以及其他关键特性。 1. **核心概念** - **对象关系映射(ORM)**: ORM是将数据库中的数据模型转换为面向...
**Hibernate学习笔记** Hibernate是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。本笔记将深入探讨Hibernate的核心概念、配置、实体管理、查询语言以及最佳实践...
在这个“hibernate学习学习”的主题中,我们将深入探讨Hibernate的核心概念、配置、实体映射、查询语言以及其在实际项目中的应用。 1. **Hibernate核心概念** - Session:这是Hibernate的主要工作接口,它负责管理...
**hibernate学习资源代码** Hibernate 是一个强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者能够用Java对象的方式处理数据库交互。本学习资源包含了一系列针对初学者的实用示例,涵盖了...
**hibernate 3.3学习笔记** 在深入探讨Hibernate 3.3的学习笔记之前,首先需要理解Hibernate是什么。Hibernate是一个强大的开源Java持久化框架,它简化了数据库操作,允许开发者将精力集中在业务逻辑上而不是数据库...