gpt4 book ai didi

java - Hibernate 是如何实现代理对象的?

转载 作者:行者123 更新时间:2023-11-30 08:05:53 25 4
gpt4 key购买 nike

我知道代理对象是:

Proxies are the mechanism that allows Hibernate to break up the interconnected cloud of objects in the database into smaller chunks, that can easily fit in memory.

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

最佳答案

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

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

javassist 相对于 standard dynamic proxy mechanism 的主要优势是它允许在具体类上创建动态代理,而不仅仅是接口(interface)。

代理的职责是在需要时(即需要访问代理实体时)“透明地”执行数据库读取操作

代理和一级或二级缓存并不是真正相关的概念。我们可以说,如果您在持有代理的实体未附加到打开的 session (即持有它的实体不在一级缓存中)时尝试“解析”代理,它将引发 LazyInitializationException(简单地说因为在这种情况下无法执行数据库读取)

关于java - Hibernate 是如何实现代理对象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com