2015-07-05 4 views
2

Есть ли способ autocommit использовать JPA без транзакции?Spring JPA - нет транзакции autocommit 'true'

persistence.xml

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

данных config.xml

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

Но я не умею видеть фиксации, пока Сесси on прекращается. Я хочу зафиксировать запись по записи.

ответ

0

Нет, в JPA нет автосообщения, это тоже не имеет особого смысла, поскольку каждое изменение для объекта является изменением, которое в конечном итоге переходит к базе данных. С помощью autocommit каждое изменение свойства будет транзакцией. Это очень специальное требование, которое не квалифицируется как кандидат на функцию JPA.

Но все, что вам нужно сделать, это обернуть вокруг сделки entityManager.merge(user);

0

вы можете попробовать использовать <property name="hibernate.connection.autocommit" value="true" /> в persistence.xml

Для справки, пожалуйста, обратитесь this link о StackOverflow для обсуждения автоматической фиксации имущества.