集合就不延迟加载了

public static void main(String[] args) {
 
  DeptEntity dept = getDept(“402882e762ae888d0162ae888e420000”);

  //dept.getEmp()获得子表的笔录集结
  System.out.println(dept.getEmp());

}

private static DeptEntity getDept(String did){
  Session session = sessionFactory.openSession();
  DeptEntity dept = (DeptEntity)session.get(DeptEntity.class, did);
  session.close();
  return dept;
}

 

运作结果:

Exception in thread “main” org.hibernate.LazyInitializationException:
failed to lazily initialize a collection of role:
com.javakc.hibernate.onetomany.entity.DeptEntity.emp, could not
initialize proxy – no Session
at
org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566)
at
org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186)
at
org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545)
at
org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
at
org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:326)
at java.lang.String.valueOf(String.java:2827)
at java.io.PrintStream.println(PrintStream.java:771)
at
com.javakc.hibernate.onetomany.action.TestAction.main(TestAction.java:74)

 

集合延迟加载初阶化退步,不能够发轫化1个代理。便是汇聚在非1对一对象关系中,为了节省财富是私下认可延迟加载,而get方法又是非延迟加载,所以在推行完贰次数据库查询后就实行session.close();关闭了session,而集合是延迟加载,在利用集结时再加载,此时session已经关闭,所以得不到代办。消除方法:能够在主表的hbm配置文件中,在<set>标签里安装lazy=”false”,集结就不推迟加载了,因而在实行get方法时,集结也获取到了,就不会油但是生延迟加载难题了。

相关文章