Hibernate ElementCollection子删除

时间:2012-12-05 14:40:23

标签: hibernate jpa jpa-2.0

我在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实体。

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

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

1 个答案:

答案 0 :(得分:1)

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

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