我正在尝试避免使用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配置。
答案 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]
让我知道它是否对你有所帮助。