У меня проблема с удалением сущности из БД с использованием спящего режима. Когда я хочу удалить сущность, я не становлюсь исключением или что-то еще, но объекты не удаляются. 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.