我主要关注EntityStatics(http://www.hibernate.org/hib_docs/v3/api/org/hibernate/stat/EntityStatistics.html)。我可以看到很多获取,加载和更新,我无法找到任何说明它们之间的差异的地方。
答案 0 :(得分:6)
通过代码向后工作,只有在从数据源检索实体时(而不是任何缓存),获取计数器才会增加 -
protected Object loadFromDatasource(
final LoadEvent event,
final EntityPersister persister,
final EntityKey keyToLoad,
final LoadEventListener.LoadType options) {
final SessionImplementor source = event.getSession();
Object entity = persister.load(
event.getEntityId(),
event.getInstanceToLoad(),
event.getLockMode(),
source
);
if ( event.isAssociationFetch() && source.getFactory().getStatistics().isStatisticsEnabled() ) {
source.getFactory().getStatisticsImplementor().fetchEntity( event.getEntityClassName() );
}
return entity;
}
从太多的地方调用了加载计数器来跟踪它们,但是无论是从数据源还是缓存加载实体,它看起来都会增加。
答案 1 :(得分:0)
https://vladmihalcea.com/hibernate-statistics/ 本文包含获取和加载计数之间的明确区别:
<块引用>long getEntityLoadCount() 它给你实体的总数 已加载的(包括从第一个或 二级缓存或数据库)由当前 EntityManagerFactory 或 SessionFactory。 long getEntityFetchCount() 它 为您提供从 数据库由当前 EntityManagerFactory 或 SessionFactory。