Hibernate的java.lang.StackOverFlowError问题

来源:互联网 发布:wine for mac下载 编辑:程序博客网 时间:2024/06/06 10:13

出现这类问题,主要是在一对多双向关联映射时在一方的java类里面的toString()方法时,出现了多方的类如图

@Override
    public String toString() {
        return "Classes [cid=" + cid + ", cname=" + cname + ", cinfo=" + cinfo
                + ", student=" + student + "]";
    }

", student=" + student +去掉即可, 因为如果加上", student=" + student + 意思就是在最后的遍历或者迭代循环里面出现了打印classes同时又打印student,进入打印student同时又打印classes从而进入一个死循环,所以才会出现内存溢出。

但是此时有的朋友可能会问,为什么会出现在toString()方法里面呢?因为Classes classes=(Classes)session.get(Classes.class,1);
        System.out.println(classes);//打印Class类会打印Student类,打印Student类又会打印Class类
        Set set=classes.getStudent();
        Iterator<Student> it=set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }

it.next()打印的是student对象,当这个对象在调用toString()方法时,如果类里面没有覆盖toString()方法,则会返回

“类名@hashcode",如果覆盖了toString()方法,则会将toString()里面的打印出来Student [sid=1, sname=张超, sinfo=太极拳, cid=null]Student [sid=2, sname=张杰, sinfo=如来神掌, cid=null]。

0 0