Есть ли способ позволить Hibernate обрабатывать удаление записи в JoinTable ассоциации @ManyToMany, если я удаляю сущность, которая не управляет этой ассоциацией?
Как я понимаю, если у меня есть@ManyToMany ассоциации, как это:
@Entity
public class AlertConfigurationVersion {
@JoinTable(
name = SUBJECT_ALERTCONFIGURATION_VERSION_TABLE,
joinColumns = @JoinColumn(name = "alert_configuration_version_id"),
inverseJoinColumns = @JoinColumn(name = "subject_id")
@ManyToMany(cascade = {
CascadeType.DETACH,
CascadeType.MERGE,
CascadeType.REFRESH,
CascadeType.PERSIST})
private Set<Subject> subjects = new HashSet<>();
}
Тогда, если я удаляю AlertConfigurationVersion
, таблица @ManyToMany будет корректно обновляться для любых Subject
s, указывающих на нее.
Но вВ моем случае я удаляю Subject
(используя стандартный метод репозитория), и теперь я получаю неприятный org.hibernate.exception.ConstraintViolationException
с базовым
org.postgresql.util.PSQLException: ERROR: update or delete on table "subject" violates foreign key constraint "fks123x93urj80014yg4vem4h43" on table "subject_alertconfigurationversion"
Detail: Key (id)=(9b915613-f37d-45c2-8fd8-8da4f9291aea) is still referenced from table "subject_alertconfigurationversion".
Могу ли я разрешить Hibernate каким-либо образом обработать этот случай?В идеале НЕ делать эту ассоциацию двунаправленной, поскольку в этом нет необходимости для бизнес-логики.Я не думаю, что это все равно будет иметь значение.
Я использую Lombok для генерации хеш-кода и равных, но я также пытался исключить ссылки и / или идентификатор из них, основываясь на рекомендации на https://dev.to/alagrede/why-i-dont-want-use-jpa-anymore-fl и https://developer.jboss.org/wiki/EqualsAndHashCode?_sscc=t
Связанные: ManyToMany с каскадом все каскадно только в одну сторону , хотя это 5 лет назад и не привлекло большого внимания, может быть какой-то путь сейчас илидаже тогда.
Еще один связанный с этим вопрос: Hibernate каскадное удаление «многие ко многим» , я попробовал «взломать» в верхнем ответе, дублируя объединяемые таблицы, но это вызывает все другие видыпроблемы, и Влад Михальке специально говорит (в другом месте) НЕ делать этого.
Также есть открытая проблема в Hibernate на https://hibernate.atlassian.net/browse/HHH-12239, которая выглядит как моя проблема, поэтому кажется, что она распознается как ошибка, но я не уверен на 100%, что это относится к моей ситуации.Вопрос о двунаправленных ассоциациях.