JPA 存储库 deleteById 方法在多个测试中不起作用

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

我有一个实体

@Entity
@Builder
@Data
@Table(name = "test_entities")
@NoArgsConstructor
@AllArgsConstructor
public class TestEntity {
    @Id
    @Column(name = "entity_id")
    Long entityId;

    @Column(name = "name")
    String name;

    @Column(name = "description")
    String description;

    @Column(name = "enttp_enttp_id")
    Long entityTypeId;

    @Column(name = "start_status_id")
    Long entityInitialStatusId;

    @Column(name = "final_status_id")
    Long entityFinalStatusId;

    @Column(name = "is_default")
    Boolean isDefault;

    @Column(name = "navi_date")
    LocalDateTime naviDate;

    @Column(name = "navi_user")
    String naviUser;

    @Column(name = "del_user")
    String delUser;

    @Column(name = "del_date")
    LocalDateTime delDate;
}

我有一个 JPA 存储库

@Transactional
public interface EntityRepository extends JpaRepository<TestEntity, Long>  {
    void deleteById(Long entityId);

}

我有一些在数据库中创建一些实体的测试。创建实体后,我删除创建的实体

@Slf4j
public class CreateEntityTest extends E2EAbstractTest{
    @Autowired
    public EntityRepository entityRepository;
    @Test
    public void createEntity(){

        log.info("Send POST /createEntity request ");
//some code
        JSONAssert.assertEquals(expectedResponseBody, actualResponseBody, JSONCompareMode.LENIENT);
        entityRepository.deleteById(entityId);
    }

    @Test

    public void createEntityGetObject(){

        log.info("Send POST /createEntuty request. getObject=true");
        //some code
        JSONAssert.assertEquals(expectedResponseBody, actualResponseBody, JSONCompareMode.LENIENT);
        entityRepository.deleteById(entityId);
    }

当我只运行一个测试时,实体会从数据库中完美删除。当我运行整个测试类(连续几次测试)时,实体不会删除。

为什么会这样?我该如何解决这个问题

java postgresql spring-data-jpa automated-tests
1个回答
1
投票
@Slf4j
@Transactional  // Add @Transactional annotation to the test class
public class CreateEntityTest extends E2EAbstractTest {

    @Autowired
    public EntityRepository entityRepository;

    @Test
    @Transactional  // Add @Transactional annotation to individual test methods
    public void createEntity() {
        log.info("Send POST /createEntity request ");
        // Some code
        JSONAssert.assertEquals(expectedResponseBody, actualResponseBody, JSONCompareMode.LENIENT);
        entityRepository.deleteById(entityId);
    }

    @Test
    @Transactional  // Add @Transactional annotation to individual test methods
    public void createEntityGetObject() {
        log.info("Send POST /createEntity request. getObject=true");
        // Some code
        JSONAssert.assertEquals(expectedResponseBody, actualResponseBody, JSONCompareMode.LENIENT);
        entityRepository.deleteById(entityId);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.