Мне не нужно обновлять значения при обновлении Crypto, но удалять все дочерние значения при удалении Crypto:
class Crypto {
...
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="cryptoId", updatable=false)
private Set<Values> values;
...
}
class Values {
...
@ManyToOne
@JoinColumn(name = "cryptoId")
private Crypto crypto;
...
}
Отладчик SQL при удалении Crypto:
Hibernate: удалить из "Crypto", где "id" =?
Ошибка:
java.sql.SQLIntegrityConstraintViolationException: ORA-02292: ограничение целостности (ARTIKUA.FK_8R5C0WLWJ3JIJTVJ559EV8NAT) нарушено - найдена детская запись
DB - это Oracle Why Hibernate, прежде чем удалить "Crypto", не удалять все их дочерние значения "Значения"?
Если вы удаляете объект Crypto через hql, спящий режим не может каскадировать операцию удаления. Поскольку каскад - это вопрос конфигурации спящего режима (т.е. Hbm.xml или аннотации), данные должны быть возвращены в Java для обработки каскадов. Выполнение модификаций строк UPDATE/DELETE в HQL происходит исключительно на сервере базы данных.
Что ты можешь сделать:
Values
WHERE cryptoId
=" + Crypto.getId (), прежде, чем удалить Crypto