2014-02-12 86 views
3

我們的架構將Spring與MongoDB結合在一起。我們通常在保存/編輯和閱讀自定義對象時沒有任何問題。最近,我們已經跑了,我們開始收到以下錯誤MongoDB - Spring - 保存對象會導致StackOverflowError

 java.lang.StackOverflowError 
at java.util.Collections.emptyList(Collections.java:2959) 
at org.springframework.data.util.TypeDiscoverer.getTypeArguments(TypeDiscoverer.java:442) 
at org.springframework.data.util.ClassTypeInformation.getTypeArguments(ClassTypeInformation.java:40) 
at org.springframework.data.util.TypeDiscoverer.getActualType(TypeDiscoverer.java:288) 
at org.springframework.data.util.ClassTypeInformation.getActualType(ClassTypeInformation.java:40) 
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.addCustomTypeKeyIfNecessary(MappingMongoConverter.java:650) 

或者

 java.lang.StackOverflowError 
at sun.misc.Unsafe.getObject(Native Method) 
at sun.misc.Unsafe.getObject(Unsafe.java:231) 
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:19) 
at java.lang.reflect.Field.get(Field.java:358) 
at org.springframework.util.ReflectionUtils.getField(ReflectionUtils.java:118) 
at org.springframework.data.mapping.model.BeanWrapper.getProperty(BeanWrapper.java:133) 
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:382) 

我將所有結合我們的架構主要類別之前,我想了一些修改是否 任你以前遇到過這種例外情況?

回答

3

顯然我不能添加記錄我的數據對象,

當我刪除它開始記錄再次

protected final Log logger = LogFactory.getLog(getClass()); 

工作MongoDB中

使用您的數據對象記錄器時要小心似乎使用@Transient應該發信號MongoDB驅動程序不要堅持記錄器變量

http://docs.spring.io/spring-data/data-document/docs/current/reference/html/#mapping-usage-annotations

+0

哇,很高興你明白這一點。通過將記錄器聲明爲私有是否有幫助? – 2014-02-12 19:26:07

+4

將其標記爲靜態(首選)或暫時(因爲,爲什麼不?),你應該沒問題。你真的不想每個實例都有一個記錄器。 – evanchooly

+0

我必須檢查,我們使用的MongoDB驅動程序還不是很成熟,當我意識到它試圖保留最終的記錄器變量時,我感到震驚。我在某處讀到,如果我使用瞬態,它會好起來的,我將不得不驗證這一點。 – Uri

相關問題