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
extends
JpaRepository

此测试方法返回断言错误:
应为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")