2

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

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

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

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

谷歌搜索该问题建议启用 OpenEntityManagerInViewFilter - 但是我们不愿意为我们的项目启用此功能,因为我们之前有过糟糕的经历,这会导致数据库连接死锁。

任何人都可以提供关于我可能缺少的配置选项的提示,或者我在文档中缺少的内容,以便让这些链接正确导航集合。

问候,

安迪

4

3 回答 3

1

您可以通过配置强制加载急切(例如使用 JPA 注释):

@Fetch(value = FetchType.EAGER)

或者您可以使用 HQL 为每个 select 语句指定预先加载join fetch

select x from X left join fetch x.y y
于 2013-08-21T09:21:48.840 回答
1

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

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

你可以去投票。

于 2013-09-13T11:48:53.043 回答
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);
    }
}
于 2017-08-08T09:59:18.567 回答