如何回滚一种方法并在测试中提交第二种方法
How to rollback back one method and commit second one in test
我有一些代码如下
@Test
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void testCallDb() {
rollbackThis();
commitThis();
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Commmit
public void commitThis() {
//do some work and commit
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Rollback
public void rollbackThis() {
//do some work and rollback
}
当我 运行 这个时,它总是回滚,这两种方法,即它不提交 commitThis()
方法数据。如果我将 @Commit
放在 testCallDb()
上,那么两种方法都会被提交,包括我想要回滚的 rollbackThis()
方法。
使用 Spring 注释(最好)或使用其他方法对此有任何解决方案吗?
更新:
作为解决方案,我使用了@Huy 的建议,即从 commitThis()
和 rollbackThis()
中删除注释并将 testCallDb()
的正文更改为:
rollbackThis();
TestTransaction.flagForRollback();
TestTransaction.end();
TestTransaction.start();
TestTransaction.flagForCommit();
commitThis();
自 Spring Framework 4.1 起,您可以通过使用 TestTransaction 中的静态方法以编程方式与测试管理的事务进行交互。
希望对你有所帮助。
我有一些代码如下
@Test
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void testCallDb() {
rollbackThis();
commitThis();
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Commmit
public void commitThis() {
//do some work and commit
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Rollback
public void rollbackThis() {
//do some work and rollback
}
当我 运行 这个时,它总是回滚,这两种方法,即它不提交 commitThis()
方法数据。如果我将 @Commit
放在 testCallDb()
上,那么两种方法都会被提交,包括我想要回滚的 rollbackThis()
方法。
使用 Spring 注释(最好)或使用其他方法对此有任何解决方案吗?
更新:
作为解决方案,我使用了@Huy 的建议,即从 commitThis()
和 rollbackThis()
中删除注释并将 testCallDb()
的正文更改为:
rollbackThis();
TestTransaction.flagForRollback();
TestTransaction.end();
TestTransaction.start();
TestTransaction.flagForCommit();
commitThis();
自 Spring Framework 4.1 起,您可以通过使用 TestTransaction 中的静态方法以编程方式与测试管理的事务进行交互。
希望对你有所帮助。