今天碰到一个奇怪的问题,先上代码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去查询数据库吧,那为什么会报上面的错误呢?
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去查询数据库吧,那为什么会报上面的错误呢?
解决方案 »
- 一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzacbca,结果是bc
- 关于用户各种退出引起的session清空问题
- 菜鸟请教javamail
- 关于java mail的问题
- java 正则表达式
- ejb开发于服务器有关么?用netbeans+glassfish开发的可以转移到tomcat+ejb上么?
- spring jms 结合 lucene文件检索
- tapestry的html中<span jwcid="greeting"/>处报异常!!有答案立即结贴!
- JBuilder7开发java应用程序,其移植性如何?
- 请问在jbuilder里写ejb该如何配置?
- socket 多线程状态反馈
- java经典的MD5加密工具类谁有?
template本身不支持延迟加载,因为它的session一用完就关闭,因为hibernate一个业务层公用一个session,你可以直接获取session,手动关闭它
怎么直接获取session?用回调HibernateCallback吗?我也试过,一样没用啊