Hibernate如何实现代理对象?

时间:2016-01-12 20:12:52

标签: java hibernate proxy

我知道代理对象是:

  

代理是一种机制,它允许Hibernate将数据库中互连的对象云分解成更小的块,这些块可以很容易地放入内存中。

  • 我想弄清楚的是,hibernate如何做到这一点 场景以及如何通过hibernate实现?
  • 我的意思是它是如何在内存中缓存的?它是一级缓存还是二级缓存?这有什么好的读物吗?

1 个答案:

答案 0 :(得分:3)

Hibernate使用javassist创建动态代理而不是具体实体来填充引用其他持久实体(或持久实体集合)的获取实体的字段。

(请注意,如果您将关系标记为急切获取:hibernate不会创建代理但是具体实体。这不是默认值)

javassist优于standard dynamic proxy mechanism的一个主要优点是它允许在具体类上创建动态代理,而不仅仅是接口。

代理的责任是透明地执行"需要时的数据库读取操作(即,当需要访问代理实体时)

代理和一级或二级缓存并不是真正相关的概念。我们可以说,如果你试图解决"当持有它的实体没有附加到开放会话时(即,当持有它的实体不在第一级缓存中时)它会引发一个LazyInitializationException(因为没有办法执行数据库)在这种情况下阅读)