2017-09-05 13 views
0

私は、Oracleデータベースにストアドプロシージャを呼び出すDAO層での方法があります。Javaテストでストアドプロシージャを呼び出した後にロールバックできますか?

@Override 
public void deleteNode(Integer nodeId) { 
    SqlParameterSource in = new MapSqlParameterSource() 
      .addValue("nodeId",nodeId) 
      .addValue("user", "DUMMY"); 

    SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(ebDataSource) 
      .withSchemaName("SCHEMA") 
      .withCatalogName("PK_GRAPH_DML") 
      .withProcedureName("DeleteNode"); 

    simpleJdbcCall.execute(in); 
} 

をそして私は、このメソッドをテストする必要があります。しかし、このテストを実行するたびにすべての変更をロールバックしたいと思っています。

@Test 
@Transactional 
@Rollback 
public void deleteEBNode_ok() { 
    Integer nodeId = 5714; 

    ebFlowService.deleteEBNode(nodeId.toString()); 

    EBFlowToolSelect nodeModelFromDatabase = ebFlowService.getNodeById(nodeId); 
    Assert.assertNull(nodeModelFromDatabase.getNodeId()); 
} 

私は@Transactional@Rollbackで私のテストに注釈を付けることを試みたが、それは助けにはなりませんでした。
ストアドプロシージャによって行われたすべての変更をテストにロールバックすることはできますか?

+1

これはストアドプロシージャによって異なります。それが自分自身のトランザクションを管理しているなら、あなたができることはあまりありません。そうでなければトランザクションに参加し、テストメソッドの '@ Transactional'は必要なものだけでなければなりません。 –

答えて

0

これはストアドプロシージャによって異なります。

  • ストアドプロシージャがCOMMIT statementが含まれている場合は、あなただけのこの文の後に撮影したすべてのアクションをロールバックすることができるようになります。
  • ストアドプロシージャがautonomous transactionの場合、トランザクションとは独立しており(独自のCOMMITステートメントを含む)、ロールバックすることはできません。

ストアドプロシージャにはCOMMIT文が含まれていないと、あなたはそれをロールバックすることができるはず自律的ではない場合。

関連する問題