这是一个非常常见的问题,因此此答案基于我博客上的这篇文章。
Hibernate代理用于替代实际的实体POJO(普通的旧Java对象)。
Proxy类在运行时生成,并且扩展了原始实体类。
Hibernate使用Proxy对象作为实体是为了允许延迟加载。
访问代理上的基本属性时,它只是将调用委派给原始实体。
每个
List,
Set,
Map在实体类型是由取代的
PersistentList,
PersistentSet,
PersistentMap。这些类负责拦截对未初始化集合的调用。
代理不发出任何SQL语句。它仅触发一个InitializeCollectionEvent,该事件由关联的侦听器处理,该侦听器知道要发出哪个初始化查询(取决于配置的提取计划)。



