2015-09-22 5 views
1

Я стараюсь, чтобы покрыть мой Repository код с junit тестов, но неожиданно я столкнулся со следующей проблемой:Spring Data: Метод с аннотацией @Query не работает, как ожидалось

@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:

@Modifying 
      @Query(value = "update SomeEntity e set v.active=0 where v.active =1") 
      public void makeAllUnactive(); 

А: someEntityRepository расширяет JpaRepository

Этот метод испытания возврата AssertionError: Expected 0 but was 1.

это означает, что makeAllUnactive не измените статус Entitites ИЛИ сделал chanches, но они невидимы.

Не могли бы вы помочь мне понять, где «пробел» в моем коде?

ответ

1

в запросе у вас есть:

@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") 

, если это не сработает, попробуйте промывки после запуска SomeEntityRepository.save(entity);

EDIT:

Вы должны включить флаг clearAutomatically в @Modifying, так что EntityManager будет обновлен. Однако имейте в виду, что это также может привести к потере всех не сбрасываемых изменений. Для некоторых более чтении посмотрите:

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

+0

о, 'v.active' мои опечатки. в коде: «e.active» игнорировать его :) – user471011

Смежные вопросы