2013-07-24 34 views
0

我有一個使用Spring Data存儲庫的項目來自動生成一些方法。其中一種方法是接受幾個參數並返回書籍列表。在存儲庫中,該方法是這樣的:Spring Data JPA懶加載註釋爲Eager的集合

List<Book> findBySellerFlagTrueAndPublishedState(PublishedState state); 

然而,當我使用該方法,好像休眠是被標註爲FetchType.EAGER書延遲加載特性。另外,當我使用JPA的Criteriabuilder自己構建查詢時,我遇到了同樣的問題。當我使用默認的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; 

的getter和setter方法只是標準,而這是一個單向關係(有沒有書Theme)。

我認爲這應該是我如何設置註釋的問題。有誰知道我錯了什麼?

回答

1

我發現用@Fetch(FetchMode.SUBSELECT)註解主題完成了我的目標,但更好的解決方案是在hibernate屬性中設置hibernate.default_batch_fetch_size。這樣我就可以將它設置爲某個數字(我選擇了100),它可以改善一次性爲所有關係提供所有懶惰和渴望獲取的性能。