首页 > 解决方案 > Spring CrudRepository deleteAll() 什么都不做

问题描述

当我尝试通过 Spring 的 CrudRepository 从我的数据库中删除所有记录时测试控制器类,但似乎什么也没发生。默认情况下似乎不刷新。

我从来没有在浏览器中的真实控制器调用中尝试过这个存储库,只是使用 Junit 测试,但我认为它可以正常工作!:)

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
@ActiveProfiles("test")
@Transactional
public class CostumerControllerIntegrationTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private CostumerService costumerService;

    private Costumer costumer;

    @Before
    public void before() {
        this.costumer = this.exampleBuilder();
        costumerService.saveAll(this.costumer);
    }

    @After
    public void after() {
        costumerService.deleteAll();
    }

    @Test
    public void Should_ReturnStandardError_When_NotFoundById() throws Exception {
        //implementation
    }


private Costumer exampleBuilder() {

    Costumer costumer = new Costumer("Test", "Test", "Test", CostumerType.LEGAL_PERSON);
    State state = new State("Example State");
    City city = new City("Example Sity", state);
    Address address = new Address("Example Address",
            "Example Address", "Example Address",
            "Example Address", city, costumer);

    costumer.getAddresses().add(address);

    return costumer;
}

}

@Service
@Transactional
public class CostumerService {

    @Autowired
    private CostumerRepository repository;

    public void deleteAll() {
        repository.deleteAll();
    }

   //another methods

}

扩展 CrudRepository 的存储库

@Repository
public interface CostumerRepository extends CrudRepository<Costumer, Integer> {

}

hibernate.show_sql=true启用后根据@TheCoder 注释显示sql ,结果为:

deleteAll()@After:_

@After
public void after() {
    costumerService.deleteAll();
}

输出sql:

2019-02-27 06:07:06 - HHH000397: Using ASTQueryTranslatorFactory
Hibernate: 
    select
        costumer0_.id as id1_3_,
        costumer0_.cpf_cnpj as cpf_cnpj2_3_,
        costumer0_.email as email3_3_,
        costumer0_.name as name4_3_,
        costumer0_.type as type5_3_ 
    from
        costumers costumer0_

输出 sqldeteleAll()上的包括删除查询。@AfterTransaction

@AfterTransaction
    public void afterTransatcion(){
        // List<Costumer> costumers = costumerService.findAll();
        costumerService.deleteAll();
    }


Hibernate: 
    select
        costumer0_.id as id1_3_,
        costumer0_.cpf_cnpj as cpf_cnpj2_3_,
        costumer0_.email as email3_3_,
        costumer0_.name as name4_3_,
        costumer0_.type as type5_3_ 
    from
        costumers costumer0_
Hibernate: 
    delete 
    from
        phones 
    where
        costumer_id=?
Hibernate: 
    delete 
    from
        costumers 
    where
        id=?

标签: javaspring-bootspring-data-jpaintegration-testing

解决方案


在我的junit中,添加repository.deleteAllInBatch()内部@BeforeEach方法后对我有用。仅在执行 junit 期间遇到此问题。

@BeforeEach
public void config()
{
   repository.deleteAllInBatch()
}

推荐阅读