2014-10-29 222 views
0

我试图从查询结果中获取EJB bean实体列表。其实在大多数时候,我没有得到任何异常。但对于一些实体,我得到了StackOverFlow异常。我没有得到它为什么会发生。如果我的jpa实体模型错了,我想我会每次都得到这个异常。当EJB bean发送实体时发生StackOverFlowException

error: java.lang.StackOverflowError 
at java.io.ObjectOutputStream$HandleTable.hash(ObjectOutputStream.java:2330) [:1.6.0_30] 
at java.io.ObjectOutputStream$HandleTable.lookup(ObjectOutputStream.java:2263) [:1.6.0_30] 
at java.io.ObjectOutputStream$ReplaceTable.lookup(ObjectOutputStream.java:2369) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1093) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) [:1.6.0_30] 
at java.util.ArrayList.writeObject(ArrayList.java:570) [:1.6.0_30] 
at sun.reflect.GeneratedMethodAccessor335.invoke(Unknown Source) [:1.6.0_30] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_30] 
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_30] 
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) [:1.6.0_30] 
at java.util.ArrayList.writeObject(ArrayList.java:570) [:1.6.0_30] 
at sun.reflect.GeneratedMethodAccessor335.invoke(Unknown Source) [:1.6.0_30] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_30] 
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_30] 
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) [:1.6.0_30] 
at java.util.ArrayList.writeObject(ArrayList.java:570) [:1.6.0_30] 
at sun.reflect.GeneratedMethodAccessor335.invoke(Unknown Source) [:1.6.0_30] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_30] 
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_30] 
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) [:1.6.0_30] 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) [:1.6.0_30] 
at java.util.ArrayList.writeObject(ArrayList.java:570) [:1.6.0_30] 
at sun.reflect.GeneratedMethodAccessor335.invoke(Unknown Source) [:1.6.0_30] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_30] 
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_30] 
+0

问题是否可以随时重现:1)始终检索相同的查询结果,2)检索各种查询结果?也许一些实体实例包含导致异常的数据?看看如何定义涉及的实体和查询可能会有帮助。 – wypieprz 2014-10-29 21:12:10

+0

这个问题每次都可以重现,因为我想第二个选项。 – user725455 2014-10-29 21:14:26

+0

然后它可能与Arraylist(即关系的一部分)有某种关系。 – wypieprz 2014-10-29 21:24:26

回答

0

解决方案是我的JPA模型是错误的。一个关系中的FetchType.EAGER会导致StackOverFLowEception。我将它改为FetchType.LAZY。