2013-08-21 45 views
2

在我們的Spring MVC應用程序,以減少其對我們的REST API支持HATEOAS工作需要使用Spring數據REST我剛剛開始。春季數據REST - 無法加載懶洋洋地收集

這幾乎立竿見影的頂級實體 - 在這裏我們可以返回的所有項目,PUT/POST新項目,或通過ID返回一個特定的項目。

我現在遇到的問題是試圖按照所提供的顯示,映射到我已經回到一個實體的集合鏈接時。

我有一個'org.hibernate.LazyInitializationException:沒有會話'被拋出 - 我認爲,因爲它遍歷父對象到集合(這是懶加載)。

搜索問題建議啓用OpenEntityManagerInViewFilter - 但是我們不願意爲我們的項目啓用此功能,因爲我們之前曾經有過不好的經歷,導致數據庫連接出現死鎖。

任何人都可以提供一個提示,也許是一個配置選項,我可能會丟失,或者說我是從文檔中缺少爲這些鏈接正確導航集合。

問候,

安迪

回答

1

您可以通過configarion(例如使用JPA註解)執行預先加載:

@Fetch(value = FetchType.EAGER) 

,或者你可以指定每個SELECT語句預先加載與HQL的join fetch

select x from X left join fetch x.y y 
+0

將集合設置爲Eager加載種類會破壞具有集合鏈接的目的 - 當我們對A類執行GET(findAll)時,我們不希望將所有B類集合返回(即使它沒有在響應中返回),因爲如果我們在頂層對象上執行了FindAll,我們將最終返回整個數據庫對象圖。 –

1

我在這裏提起JIRA問題:

https://jira.springsource.org/browse/DATAREST-114

你可以走,並投贊成票。

+0

謝謝!這似乎是我遇到的同樣的問題 - 我投了贊成票。希望它很快得到修復 –

+1

它似乎在2.0-SNAPSHOT(尚未發佈)中工作。你可以試試看。 –

0

對於基於Java的配置,根據你的Hibernate版本添加以下依賴

<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-hibernate4</artifactId> 
</dependency> 

添加以下配置。

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter{ 

    public MappingJackson2HttpMessageConverter jacksonMessageConverter(){ 
     MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); 

     ObjectMapper mapper = new ObjectMapper(); 
     //Registering Hibernate4Module to support lazy objects 
     mapper.registerModule(new Hibernate4Module()); 

     messageConverter.setObjectMapper(mapper); 
     return messageConverter; 

    } 

    @Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     //Here we add our custom-configured HttpMessageConverter 
     converters.add(jacksonMessageConverter()); 
     super.configureMessageConverters(converters); 
    } 
} 
相關問題