Я пытаюсь написать код для проверки таблицы на наличие дублирующихся строк и удаления всех отмеченных строк, кроме одной (оставьте одну, удалите дубликаты). Я использую JPA NativeQuery, как показано ниже, со следующей командой SQL:
@PersistenceContext private EntityManager em;
public void findandDeleteDupDogs() {
String deleteString =
"DELETE FROM DOGS";
String wherestring = "WHERE rowid not in";
String selectminstring = "(SELECT MIN(rowid)";
String fromstring = "FROM DOGS";
String groupbystring = "GROUP BY NAME, SPECIES)";
String sqlString =
String.format(
"%s %s %s %s %s ",
deleteString,
wherestring,
selectminstring,
fromstring,
groupbystring);
try {
Query query = em.createNativeQuery(sqlString);
} catch (Exception e) {
log.error(e.getMessage());
}
}
Функция для SELECT * FROM TABLE
, чтобы проверить, прошло ли удаление:
public List<Dog> selectAll(){
String selectString = "SELECT * FROM DOGS";
Query query = em.createNativeQuery(selectString);
try {
List<Dog> results = query.getResultList();
return results;
} catch (Exception e) {
log.error(e.getMessage());
return Collections.emptyList();
}
}
Мой тест Junit, как показано ниже, проверяет работоспособность кода:
@Before
public void setUp() throws InterruptedException {
batchRepo.save(batch);
propertyRepo.save(property);
dog1 = createSameDog();
dog2 = createSameDog();
dog3 = createSameDog();
dog4 = createSameDog();
dog5 = createDifferentDog();
DogRepo.save(dog1);
DogRepo.save(dog2);
DogRepo.save(dog3);
DogRepo.save(dog4);
DogRepo.save(dog5);
}
Первый тест, который проверял оператор SELECT, работал нормально:
@Test
public void testSelectStatement(){
assertThat(DogRepository.selectAll().size()).isEqualTo(5);
}
Второй тест не удался:
@Test
public void deletedupdogs() {
DogRepository.findandDeleteDupDogs();
assertThat(DogRepository.selectAll().size()).isEqualTo(2);
}
Это ошибка:
org.opentest4j.AssertionFailedError:
Expecting:
<5>
to be equal to:
<2>
Что, на мой взгляд, означало, что запрос для функции findandDeleteDupDogs()
вообще ничего не делал, и все пять собак (включая дубликаты) все еще существуют.
Кажется, я не понимаю, что я сделал не так, и был бы признателен, если взглянул на это свежим взглядом, спасибо!