2017-03-28 126 views
0

JunitとRestテンプレートを使用してサービスクラスをテストしようとしています。私のサービスはデータベースへの複数の呼び出しを持っています。ただし、コールのいずれかがうまくいかなかったり、例外をスローすると、以前のコミットされたコールはロールバックされるはずです。しかし、以前のコミットされたトランザクションはロールバックされません。Junitで実行中にトランザクションがSpringでロールバックされない理由

ここ
@Transactional 
    class A 
    { 

    @Autowired 
    B object 

    object.someMethod()//this method has logic to save the data 

    object.someOtherMethod()//this method will throws an Exception 
    } 
    @Transactional 
    class B 
    { 
    someOtherMethod() 
     { 
     //here it will throw an exception 
     } 
    } 

は私の部分のバネの設定ファイルである

<tx:annotationdriven ref=transactionManager/> 

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

<property name="jpaVendorAdapter"> 
       <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
      </property> 

     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">validate</prop> 
       <prop key="hibernate.show_sql">true</prop>    
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 
       <prop key="hibernate.connection.autocommit">false</prop> 
      </props> 
     </property> 
    </bean> 
+0

スプリングの設定を確認しましたか?データソースファイルでautocommitがtrueに設定されている可能性があります。 –

+0

@vineethsivanごみを出さないでください。例外がスローされた場合、トランザクションはデフォルトでロールバックされます。これは '@ Transactional'アノテーションで変更できますが、自動コミットはこれとは関係ありません。 – Kayaman

答えて

1

どのようにあなたのJUnitテストを実行したのですか? SpringJUnit4ClassRunnerで実行しましたか?hereと書かれていますか? もしあなたがそうでなければ、あなたのBeanはSpringによって管理されるトランザクションでウィービングされない可能性があります。

+0

これはコメントであり、答えではありません。 – Kayaman

関連する問題