0

我试图避免休眠的延迟加载机制,并且我已经使用 Eager FetchType 创建了这个列表对象,我认为它会这样做:

@JsonIgnore
@CollectionTable(name = "nav", joinColumns = @JoinColumn(name="conn"))
@ElementCollection(fetch = FetchType.EAGER)
@IndexColumn(name="filter") private List<String> filters = Lists.newArrayList();

但我仍在阅读 PersistentList,而不是 java.util.List。对可能出什么问题有任何想法吗?

我没有使用 xml 配置。

4

2 回答 2

0

持久列表是 Hibernate 用来正确存储和从数据库中检索数据的非惰性集合。在定义可持久实体时,并非不能使用 Java 集合实现,例如 ArrayList 或 LinkedList,而只能使用接口。事实上,你要求的是一个 List,你得到的是 PersistentList,它完全尊重接口的约定。

如果你移除了 Eagerness 并调试你的类,你会看到一个惰性集合出现,这通常是一个 CGLIB 代理。

于 2012-07-10T12:31:30.773 回答
-1

为了避免延迟加载,您必须设置lazy = true而不是FetchType.EAGERmake it FetchType.JOIN

对于基于注释的映射,请参考以下链接:[http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-singleassoc-fetching]

让我知道它是否对您有帮助。

于 2012-07-10T12:31:07.513 回答