2015-06-19 62 views
0

我正在爲某些JPA註釋的實體構建Spring存儲庫。我創建了一個信息庫:具有MVC存儲庫的Spring數據JPA

public interface AppRepository extends PagingAndSortingRepository<App, String> 
{ 
} 

App類如下所示:

@Entity 
public class App implements Serializable 
{ 
    @Id 
    private String appId; 
    @OneToMany(mappedBy = "app") 
    private List<AgentUser> agentusers; 
    @OneToMany(mappedBy = "app") 
    private List<AppFacet> appfacets; 
    // getters and setters go here 
} 

其中使用agentuser和AppFacet舉行名爲app參考屬性對一個App對象。在使用agentuser類,我已經改變了RestResource REL:

@Entity 
public class AgentUser 
{ 
    ... 
    @ManyToOne 
    @JoinColumn(name = "AppId") 
    @RestResource(rel = "agentUserToApp", exported = false) 
    private App app; 
    // other properties go here 
} 

我收到以下錯誤消息,而查詢/應用程序路徑:

org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Infinite recursion (StackOverflowError) (through reference chain: org.springframework.hateoas.PagedResources["_embedded"]); 

你知道可能會造成什麼呢?請注意,我在數據庫中只有一個App對象,僅用於測試目的,沒有其他類型的對象。

更新

的軌跡是:

com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:677) 
com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156) 
com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:129) 
com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2240) 
org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:231) 
org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:208) 
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:161) 
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:101) 
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:167) 

而在這之後,很多的:

org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:352) 
org.springframework.data.rest.webmvc.mapping.LinkCollectingAssociationHandler.doWithAssociation(LinkCollectingAssociationHandler.java:101) 
+0

添加完整的堆棧跟蹤! – Jens

+1

你有「無限遞歸」,閱讀:http://stackoverflow.com/questions/3325387/infinite-recursion-with-jackson-json-and-hibernate-jpa-issue – Funzzy

回答

3

的問題在於,只要你有鏈接到一些實體,您也必須爲該實體實施一個存儲庫,以便生成正確的鏈接。

+0

我有我的堆棧跟蹤相同的無限循環,當我爲每個實體創建每個存儲庫時,它都有效。 – j2gl

+0

我花了兩個小時尋找錯誤。你的回答挽救了我的下午。您必須爲任何引用的實體實施存儲庫。謝謝... –

相關問題