首先,我准备在页面上制造一个懒加载异常看看。
public class Department {
private Integer id;
private String departmentName;
和
public class Employee {
private Integer id;
private String lastName;
private String email;
private Date birth;
private Date createTime;
private Department department;
....
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", birth=" + birth + ", createTime=" + createTime + ", department="** + departm**ent + "]";
}
而我从Dao中获取到employee对象并后续放入requestMap,采用的是延时加载
public List<Employee> getAll() {
String hql = "FROM Employee e";
return getSession().createQuery(hql).list();
}
我原本打算在页面上按如下输出:
<s:iterator value="#request.employees">
<tr>
<td>${id }</td>
<td>${lastName }</td>
<td>${email }</td>
<td>${birth }</td>
<td>${createTime }</td>
<td>${department.departName }</td>
</tr>
</s:iterator>
希望它在 执行 ${department.departName } 导致一个 懒加载异常发生。
在我没重写employee 的 toString时,它确确实实在此处发生了懒加载异常。
但当我在toString 输出 department时,。结果发生变化。
在到达页面后,既没有发生任何异常,但requestMap里的employees也没遍历出来。
,,,,
经过我debug发现,在程序执行的某个时期 系统调用了employee的toString。
也就是说如果要发生懒加载异常应该在 toString 输出 关连对象department时就会发生。。。但实际上,这里并没有导致任何懒加载异常的错误提示。。。
进而在页面上迭代输出时也啥数据没输出来。很诡异!
想更明了的理解,却只能理解到此。求助大神!
这应该是一个很常见的错误。因为我们总是习惯性的toString重写。
鉴于没个回答是靠谱的,我自己黏贴上答案:
是因为系统在运行过程中,struts2 捕获到了这个懒加载异常。并处理。
所以 得到的是 null
http://blog.csdn.net/i_do_can/article/details/49823567
你这个在一个java bean 中定义了一个对象为属性是吧!这个是多对一的情况,如果你在页面要有值的话, 你要设置级联。就是在你将当前对象通过sql
查询出来的时候,他关联的属性也一起查询。这样你的页面才可以显示关联到的对象 department