Hibernate多对多中间表数据更新问题

Posted no_one

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate多对多中间表数据更新问题相关的知识,希望对你有一定的参考价值。

最近在做oa系统:角色(Role)和权限(Privilege) 是多对多关系,实体类关系映射采用注解方式

 

//角色类中映射权限关系
@ManyToMany
public Set<Privilege> getPrivileges() { return privileges; }
//权限类中映射角色关系
@ManyToMany(mappedBy="privileges") public Set<Role> getRoles() { return roles; }
//部分更新功能代码:1.设置角色中的权限属性;2.更新到数据库
role.setPrivileges(new HashSet<Privilege>(privilegeList)); roleService.update(role);

这种配置下中间表会更新,但是如果mappedBy放在角色类中,再更新角色的话,中间表则不会更新,后台也不会报错。

简单说明,因为在权限类中使用了mappedBy指向了角色对象中的privileges,这样的意思就是只能通过角色操作来做中间表(role_privilege)维护工作。

如果mappedBy放在角色类中指向权限对象中的roles,则通过角色来做维护的时候,中间表是不会做任何数据修改工作的,只能通过权限维护操作中间表(privilege_role)。

注:不知道为何Hibernate会有这个限制。

 

以上是关于Hibernate多对多中间表数据更新问题的主要内容,如果未能解决你的问题,请参考以下文章

hibernate多对多映射中间表有多余字段问题该如何映射

Hibernate多对多两种情况

hibernate表映射xml方式多对多怎么配置

hibernate关联关系(多对多)

hibernate 表关系映射详解之多对多

Hibernate、Spring 框架和多对多