1. 程式人生 > >Hibernate多對一遍歷物件的時候報java.lang.StackOverflowError錯誤

Hibernate多對一遍歷物件的時候報java.lang.StackOverflowError錯誤

·在Hibernate中多對一關係,有時候不習慣使用debug,比較喜歡在控制檯打印出來物件。這個時候就喜歡在兩個物件裡面都重寫toString方法。這個時候變報了下面的這個錯誤。

java.lang.StackOverflowError
	at java.lang.Integer.toString(Integer.java:113)
	at java.lang.String.valueOf(String.java:2931)
	at java.lang.Integer.toString(Integer.java:722)
	at java.lang.String.valueOf(String.java:2826)
	at java.lang.StringBuilder.append(StringBuilder.java:115)
	at com.zjoa.entity.Page.toString(Page.java:97)
	at java.lang.String.valueOf(String.java:2826)
	at java.lang.StringBuilder.append(StringBuilder.java:115)
	at java.util.AbstractCollection.toString(AbstractCollection.java:422)
	at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:327)
	at java.lang.String.valueOf(String.java:2826)
	at java.lang.StringBuilder.append(StringBuilder.java:115)
	at com.zjoa.entity.Menu.toString(Menu.java:86)
	at java.lang.String.valueOf(String.java:2826)
	at java.lang.StringBuilder.append(StringBuilder.java:115)
	at com.zjoa.entity.Page.toString(Page.java:98)
	at java.lang.String.valueOf(String.java:2826)

原因就是你把兩個物件的toString方法都重寫之後,應用程式遞迴太深了,所以發生了堆疊溢位。解決方法就是將多的一方物件裡面重寫的toString方法去掉,或者兩個物件裡面重寫的toString方法都去掉。就ok了。