hibernate支持lazy策略只有在session打开状态下有效。
hibernate lazy策略可以使用在:
* 标签上,可以取值:true/false
* 标签上,可以取值:true/false需要类增强工具
*
* 单端关联上,可以取值:false/proxy/noproxy
1.1. 标签上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"> class=" native"/> 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()); } }