为什么hibernate需要将它的实体写入接口才能使它们在延迟加载时正常工作?
答案 0 :(得分:4)
hibernate需要接口的唯一场景是集合。这是因为hibernate使用自己的集合实现进行延迟加载 - PersistentBag
,PersistentSet
等,并将它们分配给您的字段。这些实现持有对会话的引用,以便他们可以在需要时填充其数据。
Hibernate可以将PersistentSet
分配给private Set<Foo> set;
(他们使用反射执行此操作),但private HashSet<Foo> set;
无法执行此操作,因为PersistentSet
不会延伸{ {1}}
对于惰性HashSet
关联 - hibernate使用javassist(或cglib)创建代理对象,并且它不需要接口。这是一个很少使用的功能,代理是真实对象的子类,所以除非你使用@*ToOne
(你不应该这样做),它才能正常工作。