Hibernate 拦截器获取与加载

标签 hibernate load statistics fetch interceptor

我已经编写了一个拦截器来记录 onLoad 事件,但我希望能够区分加载和获取,即 Hibernate 是否必须从数据库获取实体,或者是否需要从数据库中获取实体。只需从其缓存之一加载它即可。

我无法使用 Hibernate 统计信息的原因是因为我想要更细粒度地分析什么方法导致哪个加载/获取/查询,这就是我使用拦截器的原因。所以我想我的问题是,如何使用拦截器区分加载和获取?

提前致谢!

最佳答案

经过大量研究后,我实际上要寻找的是 DefaultLoadEventListener 中的 loadFromDatasource。 Hibernate 将使用 event.isAssociationFetch() 来查看是否应将其记录为统计信息中的提取。重写此方法并添加该检查将准确反射(reflect) Hibernate 统计信息。

我能够通过以下方式追踪到这一点:In hibernate statistics whats the difference between load and fetch ,并用此注册事件监听器: eventlisteners using hibernate 4.0 with spring 3.1.0.release?

但是,我注意到的一件事是,您需要清除事件监听器组,否则将会有他们的默认监听器,它将获取对象,并且当您的监听器检查时,它会认为该对象已经被已获取(它已获取),因此不会将其记录在您的统计信息中。

关于Hibernate 拦截器获取与加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938581/

相关文章:

c - 在c中将数据从文件加载到数组

coldfusion - 是否应该使用 CFHTTP 进行本地服务器调用?

Java 和 JNI - 加载 dll 库仅适用于我的计算机

machine-learning - 如何构建多元排名系统?

php - 在 PHP 中创建 P 值

java - Hibernate:从不同线程插入具有唯一约束的对象

java - Hibernate 4.3.6 DDL生成:索引中包含的列的大写名称

java - Eclipse 符合 "Unresolved generator name"但一切正常

excel - 使用 Excel 显示日期范围内出现的次数

Java, Spring : Text comparison sometimes adding null entries.