禁用Hibernate中String列表的延迟加载

时间:2012-07-10 12:24:17

标签: java hibernate persistence

我正在尝试避免使用hibernate的延迟加载机制,并且我已经使用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配置。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

为避免延迟加载,您必须设置lazy = true而不是FetchType.EAGER使其成为FetchType.JOIN

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

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

相关问题