什么是hibernate.connection.autocommit和hibernate.c3p0.autocommit之间的区别?

时间:2015-12-07 13:00:43

标签: java spring hibernate

我有以下bean:

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />

    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql">
                <value>${hibernate.show_sql}</value>
            </property>
            <property name="generateDdl">
                <value>${generateDdl}</value>
            </property>
            <property name="databasePlatform">
                <value>${databasePlatform}</value>
            </property>
        </bean>
    </property>

    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
            <prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>
            <prop key="hibernate.archive.autodetection">${hibernate.archive.autodetection}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            <prop key="hibernate.comment_sql">${hibernate.comment_sql}</prop>

            <!-- optimization settings -->
            <prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>
            <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>

            <!-- c3p0 connection pool settings -->
            <prop key="hibernate.c3p0.acquire_increment">${hibernate.c3p0.acquire_increment}</prop>
            <prop key="hibernate.c3p0.idle_test_period">${hibernate.c3p0.idle_test_period}</prop>
            <prop key="hibernate.c3p0.timeout">${hibernate.c3p0.timeout}</prop>
            <prop key="hibernate.c3p0.maxIdleTime">${hibernate.c3p0.maxIdleTime}</prop>
            <prop key="hibernate.c3p0.min_size">${hibernate.c3p0.min_size}</prop>
            <prop key="hibernate.c3p0.max_size">${hibernate.c3p0.max_size}</prop>
            <prop key="hibernate.c3p0.max_statements">${hibernate.c3p0.max_statements}</prop>
            <prop key="hibernate.c3p0.min_pool_size">${hibernate.c3p0.min_pool_size}</prop>
            <prop key="hibernate.c3p0.max_pool_size">${hibernate.c3p0.max_pool_size}</prop>
            <prop key="hibernate.c3p0.preferredTestQuery">${hibernate.c3p0.preferredTestQuery}</prop>
            <prop key="hibernate.c3p0.idleConnectionTestPeriod">${hibernate.c3p0.idleConnectionTestPeriod}</prop>
            <prop key="hibernate.c3p0.autocommit">${hibernate.c3p0.autocommit}</prop>

            <!-- second level cache settings -->
            <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
            <prop key="net.sf.ehcache.configurationResourceName">${net.sf.ehcache.configurationResourceName}</prop>
            <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
            <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
        </props>
    </property>
</bean>

有人可以向我解释一下hibernate.connection.autocommithibernate.c3p0.autocommit之间的区别吗?还有另一个相同的属性。有什么不同?如果它们不同会发生什么呢?

1 个答案:

答案 0 :(得分:0)

根据c3p0文档:

autoCommitOnClose必须在c3p0.properties中设置,C3P0默认:false

不幸的是,JDBC规范没有对Connection关闭上未解决的挂起事务进行处理。 C3P0的默认策略是回滚任何未提交的未决工作。 (我认为这绝对是正确的策略,但是在JDBC驱动程序供应商之间没有达成共识。)将autoCommitOnClose设置为true会导致提交未提交的挂起工作,而不是在Connection关闭时回滚。

hibernate.c3o0.autocommit驱动此设置时,可以说,不同之处在于hibernate.connection.autocommit就像用begin transaction;然后用commit包装每个查询一样。

不推荐两者。