我在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)的选项
到目前为止,用户可以被限制在一个部门列表中。
例如: 汤姆在第10和第11部门有任务1
我的问题是,如果我删除任务:
departmentsByMission.remove(mission)
不会删除链接User / Mission / DepartmentList的role
行。
我阅读了很多帖子,看来ElementCollection
无法进行批量删除。
我尝试在DepartmentList外键的角色表上使用约束ON CASCADE DELETE
,但这似乎与我想要的相反。删除DepartmentList将删除该角色。
所以我希望在entityManager.remove(departmentList)
的{{1}}方法中执行removeMission
之类的操作。
不幸的是,似乎actor
无法放入PersistentContext
实体。
所以我有点困惑什么是解决方案,知道我想避免数据库触发器。
感谢任何解决方案,我真的被困在那里。
答案 0 :(得分:1)
我认为这个问题是由数据模型引起的,而不是ORM,hibernate或JPA的问题。根据我的经验,这似乎是一种非传统的方法。
任务可以是自己的实体,其中包含也作为实体存在的部门属性。在创建任务地图时,使用数据库中的代理键作为地图的关键会更有用。我建议您花时间查看需要映射的其他实体的数据模型。