Hibernate entityManager.remove (entity) не удаляет сущность, исключение не выдается - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблема с удалением сущности из БД с использованием спящего режима. Когда я хочу удалить сущность, я не становлюсь исключением или что-то еще, но объекты не удаляются. Persist и merge работают нормально.

//
// Create, update, delete configuration values in DB
//
try {
    beginTx();
    for (ConfigurationValue configurationValue : configurationValuesToBeDeleted) {
        System.out.println("DELETE: " + configurationValue);
        em.remove(configurationValue);
        em.flush();
    }
    for (ConfigurationValue configurationValue : configurationValuesToBeUpdated) {
        System.out.println("UPDATE: " + configurationValue);
        em.merge(configurationValue);
        em.flush();
    }
    for (ConfigurationValue configurationValue : configurationValuesToBeCreated) {
        System.out.println("CREATE: " + configurationValue);
        em.persist(configurationValue);
        em.flush();
    }
    commitTx();
    } catch (Exception e) {
        rollbackTx();
        LOGGER.error("Something went wrong during persisting Configuration for object id " + objectId);
        throw new IOException("Something went wrong during persisting Configuration for object id " + objectId, e);
    }
}

Во время обновления и создания hibernate показывает правильные операторы вставки / обновления SQL. Но для удаления ничего подобного нет. Когда у меня есть 2 ConfigurationValue объектов в списке configurationValuesToBeDeleted, я вижу только системную печать, но ничего больше из спящего режима, и объекты все еще находятся в базе данных.

Удаление работает, но только если я использую nativeQuery чтобы сделать executeUpdate() следующим образом:

for (ConfigurationValue configurationValue : configurationValuesToBeDeleted) {
    System.out.println("UPDATE: " + configurationValue);
    Query query = em.createNativeQuery("DELETE from CONFIGURATION_VALUE where ID = :id");
    query.setParameter("id", configurationValue.getId());
    query.executeUpdate();
}

Я использую Hibernate 5.4.7.Final и Java 11, база данных Oracle 19.

...