count sessionFactory.getStatistics()。getTransactionCount()为0

时间:2013-07-03 12:27:30

标签: spring hibernate session transactions

这个问题是为了提高我对如何在spring hibernate会话中管理事务的理解。当我打印getSessionFactory()getStatistics()。getTransactionCount()时,它会在getSessionFactory()时输出'0'。getCurrentSession()。getTransaction()。isActive()是'true'。我真的很困惑。请为我清楚一点。

以下是我希望事务发生的代码段:

@Transactional(propagation=Propagation.REQUIRED)
public int insertNewRecord(){
System.out.println(getSessionFactory().getCurrentSession().getTransaction().isActive());//gives `true`
System.out.println(getSessionFactory().getCurrentSession().getStatistics()); //Gives statistics
System.out.println(getSessionFactory().getStatistics().getSessionOpenCount());// Gives 1
System.out.println(getSessionFactory().getStatistics().getTransactionCount());// Gives 0
}

我的spring和Hibernate配置:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mappingLocations">
        <list><value>classpath:Employee.hbm.xml</value></list>
    </property>
    <property name="hibernateProperties">
        <props>
            <!-- SQL dialect -->
            <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
            <!-- Enable Hibernate's current session context -->
            <!-- <prop key="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</prop> --><!-- org.hibernate.context.internal.ThreadLocalSessionContext -->

            <!-- Disable the second-level cache -->
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <!-- Echo all executed SQL to stdout -->
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.generate_statistics">true</prop>

        </props>
    </property>
</bean>

以下是交易经理:

<bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="dataSource" ref="dataSource" />
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

1 个答案:

答案 0 :(得分:1)

好吧,您可能想尝试执行该代码几次,因为getTransactionCount()方法记录为:

  

我们知道已完成的交易数量

因此,如果你从零开始,但是你在交易中间计算,那么交易还没有完成,所以计数仍然是零。

您可能还想添加对isStatisticsEnabled()的调用并打印结果,只是为了仔细检查是否已启用统计信息。