2012-02-21 20 views
2

私はプロジェクトにspring、hibernate、およびmavenを使用しています。JUnitテスト、トランザクションに関連するエラー

私は一つのクラスこのクラスの

@Service 
public class ServiceImpl implements Service ,Serializable{ 
    //Code 
} 

の下に私は1つの方法は、私はこの方法のJUnitテストを行う

@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW, readOnly = false) 
public void doSomething(Obj a, Obj b){ 
    //code 
} 

、下図のように宣言していたていました。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:com/mt/sm/application-context.xml", "classpath:com/mt/sm/security-context.xml"}) 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
@Transactional 
public class ServiceImplTest { 
    @Test 
    public void testdoSomething() { 
     //code 
    } 
} 

私は

Testcase: testdoSomething(com.mt.sm.services.ServiceImplTest): Caused an ERROR 
Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly 

以下、このエラーを得たが、同じように私は、テストを実行することができ、その結果について

public void call (Obj a, Obj b) { 
    doSomething(a,b); 
} 

@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW, readOnly = false) 
public void doSomething(Obj a, Obj b){ 
    //code 
} 

上記1を呼び出すために1つのより多くのメソッドを宣言します。 なぜこれがエラーなしで機能しているのか尋ねたいだけです。

答えて

1

春はAOPプロキシ経由でトランザクションを管理するため、内部コールは決してトランザクションではありません(あなた自身を代理することはできません)

関連する問題