为什么 Hibernate 要求将其实体写入接口(interface),以便它们能够通过延迟加载正确工作?
最佳答案
hibernate 需要接口(interface)的唯一场景是集合。这是因为 hibernate 使用自己的集合实现来进行延迟加载 - PersistentBag
, PersistentSet
等并将它们分配给您的字段。这些实现保存对 session 的引用,以便它们可以在需要时填充数据。
Hibernate 可以分配 PersistentSet
至private Set<Foo> set;
(他们通过反射来做到这一点),但对于 private HashSet<Foo> set;
来说不可能这样做,因为PersistentSet
不扩展 HashSet
至于懒@*ToOne
关联 - hibernate 使用 javassist (或 cglib)创建代理对象,并且不需要接口(interface)。无论如何,这是一个很少使用的功能,并且代理是真实对象的子类,所以除非您使用 getclass()
(你不应该这样做),它工作得很好。
关于java - Hibernate,将域对象写入接口(interface)以进行延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928245/