当表A和表B一对多的关系 对于A和B的实体类,设置FetchType=EAGER时,取A表数据,对应B表的数据都会跟着一起加载,优点不用进行二次查询。缺点是严重影响数据查询的访问时间。 解决办法FetchType=LAZY,此时查询的访问时间大大缩短,缺点是查询表A 的数据时,访问不到表B的数据。 解决办法尝试一,在web.xml中加入下面配置,表示在页面中关闭session <!-- 把session的关闭延迟到jsp页面显示之后,在配在struts2上面。--> <filter> <filter-name>OpenSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInView</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 出现的问题是:新增加一条记录回到列表页面,对应的B表数据还是没有。 解决办法尝试二: 在session未关闭前循环List,显示调用,举例如下 for(B b:bList){ b.getA(); } 出现问题:如果debug模式,可以获得A信息,如果tomcat正常运行模式,还是取不到A。没有具体研究是不是因为我们实在ManyToOne多的端取一端。 解决办法三:此办法可以应用 for(B b:bList){ Hibernate.initialize( b.getA()); } 解决办法四:此办法也可以应用 在session关闭后,我可以循环 for(B b:bList){ int aId = b.getA().getId(); A a = findAById(aId); b.setA(a); }
来源:https://blog.csdn.net/janefir/article/details/19555803