<one-to-one>、<many-to-one>单端关联上,可以取值:false/proxy/noproxy(false/代理/不代理)
实例一:所有lazy属性默认(支持懒加载)
session = HibernateUtils.getSession(); tx = session.beginTransaction(); //不发出SQL语句,支持lazy(懒加载) User user = (User) session.load(User.class, 3); //发出SQL语句,只加载普通属性,集合中的数据不会加载 System.out.println("user.name=" + user.getName()); //不会发出SQL语句,只返回代理类 Group group = user.getGroup(); //发出SQL语句,因为现在真正使用对象 System.out.println("group.name=" + group.getName()); tx.commit(); |
实例二:将<many-to-one>中的lazy设置为false,其它默认
session = HibernateUtils.getSession(); tx = session.beginTransaction(); //不会发出SQL User user = (User) session.load(User.class, 3); //会发出SQL,发出两条SQL,分别是User和组 //因为<many-to-one>中的lazy=false,则会加载Group System.out.println("user.name=" + user.getName()); //不会发出,已经在上面加载了数据 Group group = user.getGroup(); //不会发出,已经在上面加载了数据 System.out.println("group.name=" + group.getName()); tx.commit(); |
实例三:将<class>中的lazy设置为false,其它默认
session = HibernateUtils.getSession(); tx = session.beginTransaction(); //会发出SQL,因为<class>中的lazy=false User user = (User) session.load(User.class, 3); //不会发出SQL,已经在上面加载了 System.out.println("user.name=" + user.getName()); //不会发出,因为<class>标签上的lazy只对普通属性的影响 //<class>标签上的lazy不会影响到单端关联上的lazy特性 Group group = user.getGroup(); //会发出,因为开始使用对象 System.out.println("group.name=" + group.getName()); tx.commit(); |