Hibernate,将域对象写入接口以进行延迟加载

时间:2011-08-03 14:38:25

标签: java hibernate

为什么hibernate需要将它的实体写入接口才能使它们在延迟加载时正常工作?

1 个答案:

答案 0 :(得分:4)

hibernate需要接口的唯一场景是集合。这是因为hibernate使用自己的集合实现进行延迟加载 - PersistentBagPersistentSet等,并将它们分配给您的字段。这些实现持有对会话的引用,以便他们可以在需要时填充其数据。

Hibernate可以将PersistentSet分配给private Set<Foo> set;(他们使用反射执行此操作),但private HashSet<Foo> set;无法执行此操作,因为PersistentSet不会延伸{ {1}}

对于惰性HashSet关联 - hibernate使用javassist(或cglib)创建代理对象,并且它不需要接口。这是一个很少使用的功能,代理是真实对象的子类,所以除非你使用@*ToOne(你不应该这样做),它才能正常工作。