我已经使用延迟抓取配置了我的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的值。为什么呢?
答案 0 :(得分:1)
延迟提取仍然只提取一次,将结果存储到后续调用中。在第二次调用期间,数据已被提取,因此即使在会话关闭后也可以返回。