Hibernate ElementCollection дочерние удаления
У меня есть это отображение в моей сущности UserPO:
@ElementCollection
@JoinTable(name = "role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "department") })
@MapKeyJoinColumn(name = "mission")
private Map<MissionPO, DepartmentListPO> departmentsByMission = new HashMap<MissionPO, DepartmentListPO>();
Я использую таблицу DepartmentList и DepartmentListPO в качестве Map<MissionPO, List<DepartmentPO>>
кажется не вариант с Hibernate (или JPA)
Пока все хорошо, пользователь может получить задание, ограниченное списком отделов.
Пример: у Тома есть миссия 1 в отделах 10 и 11
Моя проблема в том, что если я уберу миссию:
departmentsByMission.remove(mission)
role
строка, связанная с User/Mission/DepartmentList, не удаляется. Я прочитал много тем, и кажется, что массовое удаление невозможно с ElementCollection
,
Я пытался использовать ограничение ON CASCADE DELETE
в таблице ролей на внешнем ключе DepartmentList, но это похоже на то, что я хочу. Удаление DepartmentList удалит роль.
Так что я хотел бы сделать что-то вроде entityManager.remove(departmentList)
в removeMission
метод actor
,
К сожалению, кажется, что PersistentContext
нельзя положить в User
юридическое лицо.
Поэтому я немного запутался, каким было бы решение, зная, что хотел бы избежать триггера базы данных.
Спасибо за любое решение, я действительно застрял там.
1 ответ
Я думаю, что эта проблема вызвана моделью данных, а не проблемой ORM, спящего режима или JPA. Исходя из моего опыта, кажется, что это нестандартный подход.
Миссия может быть собственной сущностью, которая содержит свойство отдела, которое также существует как сущность. При создании карты миссий было бы более полезно использовать суррогатный ключ из базы данных в качестве ключа для карты. Я бы посоветовал вам потратить время на пересмотр вашей модели данных для дополнительных объектов, которые необходимо сопоставить.