2013-08-21 2 views
2

Я только что начал использовать Spring Data REST в нашем приложении Spring MVC для сокращения работы, необходимой для поддержки REST HATEOAS для нашего API.Весенние данные REST - коллекция неудачной загрузки

Это почти мгновенно работало для объектов верхнего уровня, где мы могли возвращать все элементы, PUT/POST новые элементы или возвращать определенный элемент по идентификатору.

Проблема, с которой я столкнулся сейчас, заключается в попытке выполнить ссылку, предоставленную для отображения коллекции, которая сопоставляется с сущностью, которую я вернул.

У меня возникла ошибка «org.hibernate.LazyInitializationException: no Session» - я предполагаю, что она пересекает родительский объект в коллекцию (которая лениво загружена).

Перейти к началу страницы Решение проблемы с использованием проблемы предполагает использование OpenEntityManagerInViewFilter - однако мы не хотим включать это для нашего проекта, поскольку у нас были плохие впечатления, прежде чем это привело к мертвым блокировкам с соединениями с базой данных.

Может ли кто-нибудь указать подсказку о возможностях конфигурации, которые могут отсутствовать, или что-то, что мне не хватает в документации, чтобы эти ссылки правильно перемещались по коллекции.

С уважением,

Энди

ответ

1

Вы можете применять жадную загрузку по configarion (например, с помощью JPA аннотации):

@Fetch(value = FetchType.EAGER) 

или вы можете указать жадную загрузку каждого оператора выбора с HQL-х join fetch

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

Настройка коллекции для жадной загрузки своего рода поражение цели из имеющих ссылки на коллекцию - когда мы делаем GET (FindAll) по классу А, не то хотят иметь все Коллекции класс B (даже если он не возвращен в ответе), так как мы фактически вернем весь массив объектов базы данных, если бы мы сделали FindAll на объекте верхнего уровня. –

1

Я подал JIRA вопрос здесь:

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

Вы можете пойти и проголосовать за него.

+0

Спасибо! Это, похоже, та же проблема, с которой я столкнулся - я проголосовал за нее. Надеюсь, он скоро исправится. –

+1

Кажется, что он работает в 2.0-SNAPSHOT (еще не выпущен). Вы можете попробовать. –

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); 
    } 
} 
Смежные вопросы