首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring JPA - No transaction set autocommit 'true‘

Spring JPA - No transaction set autocommit 'true‘
EN

Stack Overflow用户
提问于 2015-07-05 18:57:40
回答 3查看 24.1K关注 0票数 3

有没有办法在不使用事务的情况下使用JPA自动提交?

persistence.xml

代码语言:javascript
复制
<persistence-unit name="mytest" transaction-type="RESOURCE_LOCAL">
    <properties>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
    </properties>
</persistence-unit>

data-config.xml

代码语言:javascript
复制
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="mytest" />
        <property name="dataSource" ref="myDataSource" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
                <property name="database" value="ORACLE" />
            </bean>
        </property>
        <property name="jpaPropertyMap">
            <map>
<entry key="hibernate.format_sql" value="false" />
                <entry key="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
                <entry key="hibernate.jdbc.fetch_size" value="0" />
                <entry key="hibernate.jdbc.batch_size" value="0" />
                <entry key="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
            </map>
        </property>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <qualifier value="mytest"/>
    </bean>

代码

代码语言:javascript
复制
for(User user: users) {
    entityManager.merge(user);
    entityManager.flush();
}

但是在会话终止之前,我看不到提交。我想要一个记录一个记录地提交。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-06 16:10:18

不,JPA中没有自动提交,它也没有多大意义,因为对实体的每个更改都是最终进入数据库的更改。使用自动提交,对属性的每一次更改都将是一个事务。这是一个非常特殊的要求,不能作为JPA的候选特性。

但是,您需要做的就是将一个事务包装在entityManager.merge(user);周围

票数 2
EN

Stack Overflow用户

发布于 2015-07-06 16:29:34

您可以尝试在persistence.xml中使用<property name="hibernate.connection.autocommit" value="true" />

有关自动提交属性的讨论,请参考stackoverflow的this link作为参考。

票数 0
EN

Stack Overflow用户

发布于 2021-10-20 13:22:33

不,有一种方法可以禁用事务并使用自动提交。如果您使用的是spring boot应用程序,只需在application.properties文件中设置该属性即可。

代码语言:javascript
复制
spring:
  jpa:
    properties:
      hibernate:
        allow_update_outside_transaction: true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31229647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档