我们正在使用SpringFramework 3.2.12.RELEASE,Hibernate 4.1.6.FINAL对抗Oracle 11g。
我们有一个由JPATransactionManager管理的服务。该服务接受id作为主键,并创建一个具有id的新实体,保存它,进行外部调用,然后更新实体。在具有相同id的多线程测试下,我期望在第一个线程完成插入并进行外部调用之后所有其他线程都被阻塞,但事实并非如此。该服务使用@Transactional(propagation = Propagation.REQUIRES_NEW,readOnly = false)进行注释,并且两个保存调用是通过JpaRepository进行的。下面是我的弹簧配置。
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"></property>
<property name="generateDdl" value="false"></property>
<property name="database" value="ORACLE"></property>
</bean>
<bean id="abstractEntityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
abstract="true">
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
</bean>
<bean id="myEntityManagerFactory" parent="abstractEntityManagerFactory">
<property name="persistenceUnitName" value="my" />
<property name="dataSource" ref="myDataSource" />
<property name="PackagesToScan" value="test.schema" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEntityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<jpa:repositories base-package="test.dao"
entity-manager-factory-ref="myEntityManagerFactory"></jpa:repositories>
感谢评论和帮助!