首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring数据:带有注释@Query的方法不像预期的那样工作

Spring数据:带有注释@Query的方法不像预期的那样工作
EN

Stack Overflow用户
提问于 2015-09-22 11:32:55
回答 1查看 818关注 0票数 1

我试图用Repository测试来覆盖我的junit代码,但出乎意料的是,我面临着以下问题:

代码语言:javascript
复制
  @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());});
    } 

其中:makeAllUnactive()方法只是一个@Query

代码语言:javascript
复制
 @Modifying
            @Query(value = "update SomeEntity e set v.active=0 where v.active =1")
            public void makeAllUnactive();

和:someEntityRepository扩展了JpaRepository

此测试方法返回AssertionErrorExpected 0 but was 1.

这意味着makeAllUnactive并没有改变Entitites或did的状态,但它们是不可见的。

你能帮我理解代码中的“差距”在哪里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 13:09:23

在您的查询中:

代码语言:javascript
复制
@Query(value = "update SomeEntity e set v.active=0 where v.active =1")

你应该把它改成:

代码语言:javascript
复制
@Query(value = "update SomeEntity e set e.active=0 where e.active =1")

如果这不起作用,请在运行SomeEntityRepository.save(entity);之后尝试刷新

编辑:

您应该在clearAutomatically中启用@Modifying标志,以便更新EntityManager。然而,请记住,它也可能导致失去所有非冲洗的变化。关于更多的阅读,请看一看:

http://docs.spring.io/spring-data/jpa/docs/1.5.0.M1/reference/htmlsingle/#jpa.modifying-queries

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32715744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档