今天碰到一个奇怪的问题,先上代码public Person getUserTarget(final Person p){
List<PersonJob> pj = new ArrayList<PersonJob>();
String q = "from PersonJob where personID = "+p.getNo();
pj = template.find(q);  //HibernateTemplate
for(int i = 0; i < pj.size(); i++){
p.getPersonJobs().add(pj.get(i));
                 }
System.out.println(p.getPersonJobs().size());//这句没有执行
return p;
}注释的代码没有执行,然后我在for循环这里加上try...catch,报错如下:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.oa.person.model.Person.personJobs, no session or session was closed
Person和PersonJob是两个持久类,Person和PersonJob是一对多关系,另外PersonJob和另外一个持久类是多对一关系的,已经设置为延迟加载了。pj = template.find(q);这句执行完以后应该是把符合条件的PersonJob都拿了出来,只不过和他关联的数据由于延迟加载没有拿出来,但是我在for循环并没有用到和PersonJob关联的那个类,应该不需要调用session去查询数据库吧,那为什么会报上面的错误呢?