1

我的 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 和 DepartmentListPOMap<MissionPO, List<DepartmentPO>>似乎不是 Hibernate(或 JPA)的选项

到目前为止一切顺利,用户可以被赋予仅限于部门列表的任务。

示例:Tom 在部门 10 和 11 执行任务 1

我的问题是,如果我删除一个任务:

departmentsByMission.remove(mission)

链接 User/Mission/DepartmentList的role行不会被删除。我阅读了很多线程,似乎无法使用ElementCollection.

我尝试对ON CASCADE DELETEDepartmentList 外键上的角色表使用约束,但这似乎与我想要的相反。删除 DepartmentList 将删除该角色。

所以我想做entityManager.remove(departmentList)removeMission是在actor.

不幸的是,似乎PersistentContext无法将其放入User实体中。

所以我有点困惑解决方案是什么,我知道我想避免数据库触发器。

感谢您的任何解决方案,我真的被困在那里。

4

1 回答 1

1

我认为这个问题是由数据模型引起的,而不是 ORM、hibernate 或 JPA 的问题。根据我的经验,这似乎是一种非常规的方法。

一个任务可以是它自己的实体,它包含一个部门属性,它也作为一个实体存在。在创建任务地图时,使用数据库中的代理键作为地图的键会更有用。我会鼓励您花时间检查您的数据模型以查找需要映射的其他实体。

于 2012-12-05T14:46:33.700 回答