在Hibernate统计中,load和fetch有什么区别?

toe95027  于 8个月前  发布在  其他
关注(0)|答案(2)|浏览(93)

我主要看的是静态(http://www.hibernate.org/hib_docs/v3/api/org/hibernate/stat/EntityStatistics.html)。我可以看到很多获取,加载和更新,我找不到任何地方说他们之间的区别是什么。

vyswwuz2

vyswwuz21#

通过代码向后工作,获取计数器仅在从缓存中检索实体时才递增(与任何缓存相反)-

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;
}

从太多的地方调用了加载计数器,无法跟踪所有的位置,但是看起来它在实体加载的任何时候都会增加,无论是从缓存还是从缓存。

2ul0zpep

2ul0zpep2#

https://vladmihalcea.com/hibernate-statistics/这篇文章包含了获取和加载计数之间的显式差异:
long**getLogistyLoadCount()给出当前LogistyManagerFactory或SessionFactory加载的实体总数(包括从一级或二级缓存或数据库中获取的实体)。
long
getDataFetchCount()它给出了当前DataManagerFactory或SessionFactory从数据库获取的实体总数。

相关问题