Hibernate ElementCollection子级删除
我的UserPO实体中有以下映射:Hibernate ElementCollection子级删除,hibernate,jpa,jpa-2.0,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&
@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>();
未删除链接用户/任务/部门列表的角色
行。
我读了很多文章,似乎无法使用ElementCollection
进行批量删除
我试图在DepartmentList外键的role表上使用CASCADE DELETE上的约束,但这似乎与我想要的相反。删除部门列表将删除该角色
因此,我希望在actor
的removeMission
方法中执行类似于entityManager.remove(departmentList)
的操作
不幸的是,PersistentContext
似乎无法放入User
实体中
所以我有点困惑解决方案是什么,因为我知道我希望避免数据库触发器
感谢您提供的任何解决方案,我真的陷入了困境。我认为这个问题是由数据模型引起的,而不是由ORMs、hibernate或JPA引起的。根据我的经验,这似乎是一种非常规的方法
一个特派团可以是它自己的实体,其中包含一个部门属性,该属性也作为一个实体存在。在创建任务地图时,使用数据库中的代理键作为地图的键会更有用。我鼓励您花时间检查数据模型以查找需要映射的其他实体。我认为此问题是由数据模型引起的,而不是由ORMs、hibernate或JPA引起的。根据我的经验,这似乎是一种非常规的方法
一个特派团可以是它自己的实体,其中包含一个部门属性,该属性也作为一个实体存在。在创建任务地图时,使用数据库中的代理键作为地图的键会更有用。我鼓励您花时间检查数据模型,以查找需要映射的其他实体。任务应独立于部门,因为同一任务可以分配给不同部门的不同用户。一个任务可以在不给用户的情况下生存。但你是对的,也许我可以为角色表创建一个实体,在这种情况下,我会在任务中包含一个用户属性。但你明白我想说的更重要的一点吗?为这些表使用代理键将使您的生活更轻松。好吧,我现在知道了,我不是英语专家,所以我“绕过”了代理键,而没有真正注意到它的重要性。我会这样做,但似乎使用Map和ElementCollection是我删除问题的关键否?是的,我所说的代理是指由自动递增字段、序列或触发器生成的主键。我按照您的方式使用生成的主键修改了模型。正如你所说,现在控制我的Hibernate模型容易多了。任务应该独立于部门,因为相同的任务可以分配给不同部门的不同用户。一个任务可以在不给用户的情况下生存。但你是对的,也许我可以为角色表创建一个实体,在这种情况下,我会在任务中包含一个用户属性。但你明白我想说的更重要的一点吗?为这些表使用代理键将使您的生活更轻松。好吧,我现在知道了,我不是英语专家,所以我“绕过”了代理键,而没有真正注意到它的重要性。我会这样做,但似乎使用Map和ElementCollection是我删除问题的关键否?是的,我所说的代理是指由自动递增字段、序列或触发器生成的主键。我按照您的方式使用生成的主键修改了模型。正如你所说,现在控制我的Hibernate模型容易多了。
departmentsByMission.remove(mission)