懒惰的提取如何在Hibernate中工作?

时间:2015-03-17 15:48:51

标签: java hibernate

我已经使用延迟抓取配置了我的userDetails类,我也有 为懒惰抓取配置了我的设置。 我正在运行此代码:

 userDetails user = new userDetails();

    user.setUserName("Fenil");

     Address address = new Address();
     address.setCity("baroda");
     address.setState("gujarat");
     user.getListOfAddress().add(address);

    SessionFactory sessionfactory = new          
    Configuration().configure().buildSessionFactory();
    Session session = sessionfactory.openSession();
    session.beginTransaction();

    session.save(user);
    system.out.println(user.getName()); //sop1
    session.getTransaction().commit();
    session.close();
    system.out.println(user.getName());  //sop2

当我运行上面的代码时,它给了我username的值。但是,如果我在session.close()之后立即替换sop行,那么它会抛出异常。

我的问题是:

如果我在关闭会话之前打印sop1行,它应该给我用户名,在关闭会话后,标记为sop2的行应该抛出异常,而是返回username的值。为什么呢?

1 个答案:

答案 0 :(得分:1)

延迟提取仍然只提取一次,将结果存储到后续调用中。在第二次调用期间,数据已被提取,因此即使在会话关闭后也可以返回。