0

我有一个项目正在使用 Spring Data 存储库来自动生成它的一些方法。一种这样的方法是接受几个参数并返回书籍列表。在存储库中,该方法如下所示:

List<Book> findBySellerFlagTrueAndPublishedState(PublishedState state);

但是,当我使用该方法时,似乎休眠是延迟加载书籍的属性,这些属性被注释为 FetchType.EAGER。此外,当我使用 JPA 的 Criteriabuilder 自己构建查询时,我也遇到了同样的问题。当我使用默认findOne(Long id)方法时,这些属性会被急切地加载。

我正在使用 JPA 2.0,并且正在使用 Hibernate 作为实现。

这是我遇到此问题的关系之一的注释:

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name="BOOK_THEME", 
joinColumns=@JoinColumn(name="BOOK_ID", referencedColumnName="BOOK_ID"),
inverseJoinColumns=@JoinColumn(name="THEME_ID", referencedColumnName="THEME_ID"))
@OrderColumn(name="THEME_SEQUENCE")
private List<Theme> themes;

getter 和 setter 只是标准的,它是单向的关系(在 中没有书Theme)。

我认为这一定是我如何设置注释的问题。有谁知道我有什么问题?

4

1 回答 1

1

我发现注释主题@Fetch(FetchMode.SUBSELECT)实现了我的目标,但更好的解决方案是设置hibernate.default_batch_fetch_size休眠属性。这样我可以将它设置为某个数字(我选择了 100),它会同时提高所有惰性和急切获取许多关系的性能。

于 2013-07-25T03:40:50.123 回答