2013-07-24 3 views
0

У меня есть проект, который использует хранилища Spring Data для автоматического создания некоторых своих методов. Одним из таких методов является тот, который принимает пару параметров и возвращает список книг. В хранилище, этот метод выглядит следующим образом:Spring Data JPA Lazy загружает коллекции, аннотированные как Eager

List<Book> findBySellerFlagTrueAndPublishedState(PublishedState state); 

Однако, когда я использую этот метод, похоже, спящий режим является отложенной загрузкой свойства книг, которые аннотированные в FetchType.EAGER. Кроме того, у меня такая же проблема, когда я сам создаю запрос, используя Criteriabuilder от JPA. Когда я использую метод findOne(Long id) по умолчанию, эти свойства загружаются.

Я использую JPA 2.0, и использую Hibernate в качестве реализации.

Вот мои аннотаций на одном из отношений я имею эту проблему с:

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(name="BOOK_THEME", 
[email protected](name="BOOK_ID", referencedColumnName="BOOK_ID"), 
[email protected](name="THEME_ID", referencedColumnName="THEME_ID")) 
@OrderColumn(name="THEME_SEQUENCE") 
private List<Theme> themes; 

методы получения и установки являются только стандартные, и это однонаправленная связь (нет книг в Theme).

Я думаю, что это должна быть проблема с тем, как я создал свои аннотации. Кто-нибудь знает, что у меня не так?

ответ

1

Я обнаружил, что аннотирование тем @Fetch(FetchMode.SUBSELECT) достигло моих целей, но лучшим решением было установить hibernate.default_batch_fetch_size в свойствах спящего режима. Таким образом, я мог бы установить его на некоторое количество (я выбрал 100), и это улучшит производительность всех ленивых и нетерпеливых изъятий для многих отношений сразу.

Смежные вопросы