Тест JUnit, ошибка, связанная с транзакцией - PullRequest
2 голосов
/ 21 февраля 2012

Я использую Spring, Hibernate и Maven для проекта.

У меня был один класс ниже

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

в этом классе у меня был один метод, описанный ниже,

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

Я выполняю тест JUnit этого метода.

@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 голос
/ 21 февраля 2012

Spring управляет транзакциями через прокси-серверы AOP, поэтому все внутренние вызовы никогда не будут транзакционными (вы сами не можете прокси)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...