Hibernate Spring JPA-无事务集自动提交';正确';

Hibernate Spring JPA-无事务集自动提交';正确';,hibernate,jpa,openjpa,jpa-2.1,Hibernate,Jpa,Openjpa,Jpa 2.1,有没有办法在没有交易的情况下使用JPA自动提交 persistence.xml 但是在会话终止之前,我无法看到提交。我想一条记录一条记录地提交。不,JPA中没有自动提交,这也没有多大意义,因为对实体的每个更改都是最终进入数据库的更改。使用自动提交,对属性的每一次更改都将是一次事务。这是一个非常特殊的要求,不能作为JPA的候选特性 但是您所需要做的就是围绕entityManager.merge(user)包装一个事务您可以尝试在persistence.xml中使用 有关自动提交属性的讨论,请参阅

有没有办法在没有交易的情况下使用JPA自动提交

persistence.xml


但是在会话终止之前,我无法看到提交。我想一条记录一条记录地提交。

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

但是您所需要做的就是围绕
entityManager.merge(user)包装一个事务

您可以尝试在persistence.xml中使用

有关自动提交属性的讨论,请参阅stackoverflow的讨论,以供参考

<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>
<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>
for(User user: users) {
    entityManager.merge(user);
    entityManager.flush();
}