一、.使用Hibernate时出现的问题:
①打印结果时 抛出栈溢出异常 在写完与数据交互的dao层方法之后,用Junit对方法正确性做出测试时,由于要打印出对应实体类的结果,所以就出现了问题了。
1.前提交代,三个实体类的关联关系表述:
//部门类
public class Department {
...
//部门类和职务类的关联关系为 1:n
private Set<Post> posts;
}
//职务类
public class Post {
...
//双向关联(部门类和职务类)
private Department department;
//职务类和员工类的关联关系为 1:n
private Set<Staff> staffs;
@Override
public String toString() {
return "Post [department=" + department + ", staffs=" + staffs + "]";
}
}
//员工类
public class Staff {
...
//双向关联员工类和职务类
private Post post;
}
2.使用Junit进行单元测试,看到测试实体类的每个属性的值。按照正常的方法使用快捷键改写ToString方法,如职务类中的写法,在进行查询操作后,打印实体类,会出现栈溢出的异常。
.3.问题原因:当在每个关联的实体类中都改写了ToString方法之后,ToString方法中的关联的其他类就会调用自身的ToString方法,继而再相互调用,就会出现一直循环,即报出栈溢出异常;
4.改正方法:修改ToString方法的显示结果,不要直接写成实体对象,改成用点的方式,点出其属性值即可”。
②.按照上面的方法可以解决测试的时候的问题,但是在使用structs2中的select标签进行自动回显时,会报下面这个异常:
The requested list key 'xxxxx' could not be resolved as a collection/array/map/enumeration/iterator type
原因:ToString 方法被改写成不是实体类的对象的形式,故不能自动查找到所需要的值。
解决方法,删除自己改写的ToString方法即可