Hibernate之延迟加载类对象Lazy特征实例介绍,Lazy属性有哪些?hibernate支持lazy策略只有在session打开状态下有效。
hibernate lazy策略可使用在:
* 标签上,可以取值:true/false
* 标签上,可以取值:true/false需要类增强工具
* 标签上,可以取值:true/false/extra
* 单端关联上,可以取值:false/proxy/noproxy
标签上lazy特性介绍
lazy概念:只有真正使用该对象时,才会创建,对于hibernate而言,正真使用的时候才会发出sql。标签上的lazy特性只对普通属性起作用
代码实现实例:
Group.java
public class Group { private int id; private String name;
Group.hbm.xml
<class name="Group" table="t_group"> id"> name"/> class>
测试代码实例:
/** * 运行本单元测试的条件: * * 设置标签上的lazy=true,也就是默认配置 */ 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打开状态下有效 System.out.println("group.name=" + group.getName()); } }