gpt4 book ai didi

hibernate - 如何确定 hibernate 是否有 'lazy' 加载了代理或真实对象?

转载 作者:行者123 更新时间:2023-12-04 20:55:18 25 4
gpt4 key购买 nike

在这里 hibernate 的新手。我正在使用 Hibernate 3.5,我知道默认情况下应该使用延迟获取。我通过以下方式启用了 SQL 日志记录

<property name="show_sql">true</property>

我正在请求对象 A,它具有对对象 B 的引用,该对象包含实际的数据字节数组。我将数据推送到对象 B 中,除非确实需要,否则不会从数据库中获取数据,但是当我请求对象 A 时,堆急剧跳跃,就好像它无论如何都获取了数据一样,并且我从 hibernate 中获取了此输出SQL日志记录:
Hibernate: select attachment0_.id as id11_0_, attachment0_.data as data11_0_ from attachment_data attachment0_ where attachment0_.id=?

我不清楚如何解释这一点,特别是“as”语句。 'attachment0.data' 似乎是对象 B 中的字节数组。hibernate 是说它为数组创建了一个代理,还是说它实际上是从数据库中提取数据?如果它只是创建了一个代理,我会不会看到代理的选择输出?

所以总而言之,主要问题是如何确定我是否拥有代理或真实对象,以及如何解释select语句的相关问题?

我已经深入研究了 hibernate 文档,并在网上搜索了很多,但大多数信息似乎比我缺少的基本知识高出一步,因此感谢任何帮助。

最佳答案

您拥有的对象可以是加载了所有数据的代理。如果您想取消代理对象,请在 Hibernate 中使用以下内容:

来自 org.hibernate.impl.SessionImpl您可以获得 org.hibernate.engine.PersistenceContext进而

SessionImpl session = ...;
PersistenceContext persistenceContext = session.getPersistenceContext();
Object entity = persistenceContext.unproxy(maybeProxy);

用于 unproxy 的 javadoc
/**
* Get the entity instance underlying the given proxy, throwing
* an exception if the proxy is uninitialized. If the given object
* is not a proxy, simply return the argument.
*/
public Object unproxy(Object maybeProxy) throws HibernateException;

关于hibernate - 如何确定 hibernate 是否有 'lazy' 加载了代理或真实对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350485/

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