[英]Hibernate, writing domain objects to an interface for lazy loading
為什么休眠需要將其實體寫入接口才能使其在延遲加載中正常工作?
休眠需要接口的唯一情況是集合。 這是因為hibernate將自己的集合實現(例如PersistentBag
, PersistentSet
等)用於延遲加載,並將其分配給您的字段。 這些實現保留對會話的引用,以便它們可以在需要時填充其數據。
Hibernate可以將PersistentSet
分配給private Set<Foo> set;
(它們通過反射來完成),但是對於private HashSet<Foo> set;
則無法做到private HashSet<Foo> set;
,因為PersistentSet
不會擴展HashSet
至於懶惰的@*ToOne
關聯@*ToOne
使用javassist(或cglib)創建一個代理對象,並且不需要接口。 無論如何,這是一個很少使用的功能,並且代理是實際對象的子類,因此,除非您使用getclass()
(您不應該這樣做),否則它工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.