Spring Data REST - 无法进行Lazily加载收集

时间:2013-08-21 09:08:43

标签: java rest spring-mvc hateoas spring-data-rest

我刚开始在Spring MVC应用程序中使用Spring Data REST来减少为我们的API提供REST HATEOAS支持所需的工作。

这对顶级实体几乎立即起作用 - 我们可以返回所有项目,PUT / POST新项目,或按ID返回特定项目。

我现在遇到的问题是尝试按照提供的链接来显示映射到我已返回的实体的集合。

我有一个'org.hibernate.LazyInitializationException:没有抛出Session' - 我假设它将父对象遍历到集合中(它是延迟加载的)。

搜索问题建议启用OpenEntityManagerInViewFilter - 但是我们不愿意为我们的项目启用此功能,因为我们之前遇到过导致数据库连接死锁的错误经验。

任何人都可以提供一个提示,或许可能是我可能缺少的配置选项,或者我在文档中缺少的东西,以便让这些链接正确导航集合。

此致

安迪

3 个答案:

答案 0 :(得分:1)

您可以通过配置强制执行预先加载(例如使用JPA注释):

@Fetch(value = FetchType.EAGER)

或者您可以使用HQL join fetch

为每个select语句指定预先加载
select x from X left join fetch x.y y

答案 1 :(得分:1)

我在这里提出了一个JIRA问题:

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

你可以去投票吧。

答案 2 :(得分:0)

对于基于Java的配置,请根据您的休眠版本添加以下依赖项

<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);
    }
}