Hibernate Тестирование удаления сущностей Many-To-One ведет себя по-разному с TestNG + Spring JPA - PullRequest
0 голосов
/ 30 марта 2019

Я столкнулся с этим странным поведением при выполнении модульных тестов TestNG с Spring JPA для следующих объектов.

@Entity
public class ChildEntity {
 public ChildEntity(UUID id, ParentEntity parent){
  this.id = id;
  this.parentEntity = parent;
 }
 @Id
 @Column(name = "id")
 private UUID id;

 @ManyToOne
 private ParentEntity parentEntity;
}


@Entity
public class ParentEntity {

 public ParentEntity(UUID id){
  this.id = id;
 }

 @Id
 private UUID id;

 @OneToMany(
        cascade = CascadeType.ALL,
        fetch = FetchType.EAGER,
        orphanRemoval = true,
        mappedBy = "parentEntity")
 private Set<ChildEntity> childEntities;
}

Модульный тест выглядит следующим образом.

@SpringBootTest
public class ChildEntityRepoTest extends AbstractTestNGSpringContextTests {


@Autowired
private ChildEntityRepository childEntityRepository;

@Autowired
private ParentEntityRepository parentEntityRepository;

@Test
public void testDelete() {
    UUID parentId = UUID.randomUUID();
    ParentEntity parentEntity = new ParentEntity(parentId);
    parentEntityRepository.save(parentEntity);

    UUID childId = UUID.randomUUID();
    ChildEntity childEntity = new ChildEntity(childId, parentEntity);
    childEntityRepository.save(childEntity);

    childEntityRepository.deleteById(childEntity.getId());

    Optional<ChildEntity> childEntityOpt = childEntityRepository.findById(childEntity.getId());
    assertFalse(childEntityOpt.isPresent());
}
}

С этим устройствомтест, модульный тест не пройден.И как только я проверил некоторые журналы и отладки, предполагаемый удаленный объект все еще там.

Теперь я изменил

AbstractTestNGSpringContextTests

AbstractTransactionalTestNGSpringContextTests

, и тестовый пример проходит, что означает, что дочерняя сущность фактически удаляется.

Если для дочерней сущности не установлены родительские сущности, удаление работает в любом случае.Может ли кто-нибудь объяснить или указать на статью, которую я могу использовать, чтобы понять это поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...