Java Spring数据:带有注释@Query';I don’我没有按预期工作
我试图用Java Spring数据:带有注释@Query';I don’我没有按预期工作,java,junit,transactions,spring-data,dao,Java,Junit,Transactions,Spring Data,Dao,我试图用junit测试覆盖我的存储库代码,但出乎意料的是,我遇到了以下问题: @Test @Transactional public void shoudDeactivateAll(){ /*get all Entities from DB*/ List<SomeEntity> someEntities = someEntityRepository.findAll(); /*for each Entity set 1 for f
junit
测试覆盖我的存储库
代码,但出乎意料的是,我遇到了以下问题:
@Test
@Transactional
public void shoudDeactivateAll(){
/*get all Entities from DB*/
List<SomeEntity> someEntities = someEntityRepository.findAll();
/*for each Entity set 1 for field active*/
someEntities.forEach(entity ->
{entity.setActive(1);
/*save changes*/
SomeEntityRepository.save(entity);});
/*call service, which walks through the whole rows and updates "Active" field to 0.*/
unActiveService.makeAllUnactive();
/*get all Entities again
List<SomeEntity> someEntities = SomeEntityRepository.findAll();
/*check that all Entities now have active =0*/
someEntities.forEach(entity -> {AssertEquals(0, entity.getActive());});
}
和:sometentityrepository
extendsJpaRepository
此测试方法返回断言错误:应为0,但为1。
这意味着,makeAllunActivity
没有更改实体或did CHANCES的状态,但它们是不可见的
您能帮我理解代码中的“差距”在哪里吗?在您的查询中:
@Query(value = "update SomeEntity e set v.active=0 where v.active =1")
你应该把它改成:
@Query(value = "update SomeEntity e set e.active=0 where e.active =1")
如果不起作用,请在运行sometentityrepository.save(entity)后尝试刷新代码>
编辑:
您应该在@修改
中启用自动清除
标志,以便更新EntityManager
。但是请记住,这也可能导致丢失所有未刷新的更改。更多阅读请看:
哦,“v.active”是我的拼写错误。在代码中:“e.active”忽略它:)
@Query(value = "update SomeEntity e set e.active=0 where e.active =1")