事务回滚无法在Play Framework中使用Promises吗?

时间:2015-09-28 20:17:10

标签: spring playframework transactions playframework-2.0 promise

我尝试使用Junit测试来覆盖我的代码并面对非常意外的情况:

先决条件:

ProductRepository是经典的Spring Data实施,扩展了JpaRepository

ProductService是通过ProductRepository Play! Framework内部使用Promise的服务。所有ProductService方法都会返回Promise<ServiceResponse>

请参阅下面的Junit测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes ={SomeConfig.class})
public class ProductTest{

@Inject
private ProductService service;

@Inject
private ProductRepository repository;

@BeforeTransaction
public void beforeTransaction(){
Product p = repository.getProductById(1L);
System.out.println("Before: "+ p.isActive());
}
@AfterTransaction
public void afterTransaction(){
Product p = repository.getProductById(1L);
System.out.println("After: "+ p.isActive());
}
@Test
@Transactional
public void checkProductRepository(){
Product p = repository.getProductById(1L);
p.setActive(1); 
repository.save(p);
}

@Test
@Transactional
public void checkProductService(){
service.activateById(1L).get(1000L);
}
}

结果:

之前: 0  开始交易... checkProductRepository ....  回滚交易... checkProductRepository ...  之后: 0

之前: 0  开始交易.. checkProductService ....  回滚交易... checkProductService ...  之后: 1

但是怎么可能?! 对于第二次测试,我使用ProductService事务回滚,但它没有为active之后:1 )恢复状态Product。< / p>

任何人都可以解释一下:怎么可能?以及如何解决这个问题。

0 个答案:

没有答案