Я пытаюсь удалить сущность, которая связана с различными отношениями (только @ManyToOne
). Однако Hibernate ничего не удаляет - после вызова em.remove
все остается неизменным.Hibernate EntityManager: удалить ссылочный объект не работает
У меня есть 5 объектов (E1 - E5
), ссылки на объекте (E6
) в вопросе, как это:
@Entity
public class EX {
@OneToMany(mappedBy = "eX", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
private Set<E6> e6s;
}
E6
сами имеют реверс @ManyToOne
отношений:
public class E6{
@ManyToOne(optional = false)
private E1 e1;
@ManyToOne(optional = false)
private E2 e2;
@ManyToOne(optional = false)
private E3 e3;
@ManyToOne(optional = false)
private E4 e4;
@ManyToOne(optional = false)
private E5 e5;
}
(слева выходы, дополнительные столбцы и т. д.)
Всякий раз, когда я звоню em.remove(instanceOfE6)
, просто ничего не происходит. Я добавил Hibernate SQL-Output и не вижу ни одной попытки выполнить запрос DELETE
.
Поскольку удаление может происходить из АЯКС запроса и свежей EntityManager, я добавил вызов сливаться перед удалением, вызвать otherwhise я получаю Entity неуправляемого Exception:
em.remove(em.merge(instanceOfE6));
Но ничего , Государство остается без изменений.
Поэтому я попытался добавить метод @PreRemove
, чтобы очистить все отношения до удаления объекта ... Метод никогда не вызывается.
Я пробовал различные операции с каскадом (включая Cascade.ALL
) - но поскольку все, что мне нужно, это удалить и сохранить, это тоже должно работать.
Я думал об использовании родного ВЕЬЕТЕ (каждый субъект имеет суррогатный идентификатор, так что, скорее всего, работа) - но так как все происходит изнутри AJAX-вызов, я не хочу использовать это , потому что я хочу обновить кэш-память с сохранением без повторной выборки всех вовлеченных объектов ...
Любые идеи?
Если вам нужно больше источника, просто напишите мне комментарий.
Я также попытался удалить объект в вопросе от ВСЕХ отношений (объект мудры), и вызвать em.merge()
на одном из оставшихся лиц, в надежде, что спящий режим будет whipe на несвязанный объект - не повезло.
Вы совершили транзакцию? –
Вы назвали 'em.flush()'? – jmvivo
@DavidLevesque Запуск Hibernate в режиме autocommit ... – dognose