2016-11-03 94 views
1

私は沢山のspring mvcコントローラを持つwebappを持っています。 これらのコントローラは、JPA、エンティティおよびリポジトリを使用してDBと対話します。コントローラで例外がスローされた場合、JPAロールバックトランザクションが発生する

コントローラメソッドがspring mvcによって処理されるとき、プロセス中に例外がスローされると、そのメソッドの間に追加されるすべてのDB変更がロールバックされることを確認したいと思います。ここでは例

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

コントローラ

@Controller 
public class JpaTest { 

    @Autowired 
    GroupRepository groupRepository; 

    @RequestMapping(value = "/{langId}/jpatest", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
    @ResponseBody 
    @Transactional 
    public String test() throws Exception { 
     Group group = new Group(); 
     group.setName("jpaTest"); 
     groupRepository.save(group); 
     throw new Exception("MY EXCEPTION "); 
    } 
} 

私はグループがDBに追加されません期待して!

@Transactionalはそうするが、そうしないことを願っています。

私は

<tx:annotation-driven transaction-manager="transactionManager" /> 

が効果を追加しました。 これを簡単に行う方法はありますか?

それとも私たちがジーブスで行ったように私は、スーパートランザクション管理のようなものを持っている私のディスパッチャサーブレットをカプセル化することができます:あなたは、単一の挿入のための取引をしたいですか、なぜ

protected void doDispatch(final HttpServletRequest request, final HttpServletResponse response) throws Exception { 
    JeevesDispatcherServlet.super.doDispatch(request, response); 

    TransactionManager.runInTransaction("jeevesDispatchServlet", getWebApplicationContext(), 
     TransactionManager.TransactionRequirement.CREATE_ONLY_WHEN_NEEDED, 
     TransactionManager.CommitBehavior.ONLY_COMMIT_NEWLY_CREATED_TRANSACTIONS, 
     false, new TransactionTask<Void>() { 
      @Override 
      public Void doInTransaction(TransactionStatus transaction) throws Throwable { 
       JeevesDispatcherServlet.super.doDispatch(request, response); 

       return null; 
      } 
     }); 
} 

答えて

-2

/アクションを保存します。保存が失敗した場合は、ロールバックするためには何もありませんので、保存されません

+0

これはコメントです。 – zero01alpha

1

これは最高のデザインではなく、必要な場合は、 あなたはthrow句を使用して、より具体的な例外と@TransactionalrollbackFor属性で試すことができます。

このpostをご覧ください。

関連する問題