@ExpectedDatabase 未按预期工作

问题描述 投票:0回答:1

我有一个 JUnit 测试,它对存储库层进行基本检查,从数据库中删除一个条目。

我使用 @DatabaseSetup 注释来提供初始配置,并使用 @ExpectedDatabase 来验证删除后数据库的内容。

以下是代码

    @Test
    @ExpectedDatabase(
            table = "OBJECT_ALIAS",
            value = "classpath:dbunit/data/object_alias_deleted_2115_ALIAS_5.xml")
    public void testDeleteObjectAlias() {
        ObjectAlias objectAlias = new ObjectAlias(2115, 5, "NewAlias");
        objectAliasRepository.deleteObjectAlias(objectAlias);
        //objectAliasRepository.findByPartyNo(5); //runs a select query on DB
    }

上述测试失败,但如果我取消注释行,则测试通过。 我正在使用 eclipseLink 作为 JPA 提供程序。

是什么导致了这种行为?

spring-boot jpa spring-data-jpa spring-data eclipselink
1个回答
0
投票

我找到了解决方案。

这不是问题,而是 JPA 的行为/工作方式。执行任何数据库操作时,更改都会保留在一级缓存中,直到提交事务或显式刷新持久性上下文。

问题中的场景是因为当运行选择查询时,它导致 JPA 将更改刷新到数据库。

解决方案是在测试类中显式运行entityManager.flush(),以便将更改提交到数据库。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.