Hibernate延迟加载关联lazy特征3



Hibernate延迟加载关联lazy特征:hibernate在单端关联上的lazy策略,可以取值:false/proxy/noproxy。<class>标签上的lazy不会影响到单端关联上的lazy特性。代码实例实现:

SingleEndTest1.java

/**

 * 所有lazy属性默认

 */

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);

       }

    }

}


SingleEndTest2.java

/**

 * 将<many-to-one>中的lazy设置为false,其它默认

 *

 */

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);

       }

    }

}