SSH框架双向多对多关系中如何向中间表插入数据

例如:多个用户有多个角色,多角色下有多个用户。

1.配置好多对多关系的XX.hbm.xml映射文件

POJO类:

角色类:

 Integer roleId;
 String roleName;
 String roleDesc;
 Set<UserInfo> userinfos=new HashSet<UserInfo>(0);

getter/setter方法

角色映射配置
<hibernate-mapping>
 <class name="com.dhy.entity.SysRole" table="sysrole">
 <id name="roleId" column="roleId">
 <generator class="native"></generator>
 </id>
 <property name="roleName" column="roleName" type="java.lang.String"></property>
 <property name="roleDesc" column="roleDesc" type="java.lang.String"></property>
 <set name="userinfos" table="user_role">
 <key column="roleId"></key>
 <many-to-many column="userid" class="com.dhy.entity.UserInfo"></many-to-many>
 </set>
 </class>
</hibernate-mapping>

POJO类:用户类


Integer userId;
 String cname;
 String cpwd;
 Set<SysRole> sysRoles=new HashSet<SysRole>(0);用户映射配置

getter/setter方法

<hibernate-mapping>
 <class name="com.dhy.entity.UserInfo" table="userinfo">
 <id name="userId" column="userid">
 <generator class="identity"></generator>
 </id>
 <property name="cname" column="cname" type="java.lang.String"></property>
 <property name="cpwd" column="cpwd" type="java.lang.String"></property>
 <set name="sysRoles" table="user_role">
 <key column="userid"></key>
 <many-to-many column="roleId" class="com.dhy.entity.SysRole" fetch="join"></many-to-many>
 </set>
 </class>
</hibernate-mapping>

2.UserinfoDao类中写入更新的方法:

public int updateUserinfo(UserInfo user){
 getHibernateTemplate().saveOrUpdate(user);
 return 1;
 }

3.userinfoService类中写入更新以及授予角色的方法:

/**
 * 授予用户角色
 */
 public void grantRole(String[] role,UserInfo user){
 if(role==null){
 role=new String[0];
 }
 Integer[] roleId=new Integer[role.length];
 for (int i = 0; i < roleId.length; i++) {
 roleId[i]=Integer.valueOf(role[i]);
 }
 
 //授予新角色
 for (int i = 0; i < roleId.length;i++) {
 SysRole roles=new SysRole();
 roles.setRoleId(roleId[i]);
 user.getSysRoles().add(roles);
 } 
 }
/**
 * 更新用户信息
 */

 public int updateUserinfo(UserInfo user){
 uDao.updateUserinfo(user);
 return 1;
 }

4.授予新角色的Action:

 //清除原来角色(原本放在Service中的,可是老是到这儿就空指针异常了,所以放在Action中)

 UserInfo user1=uService.findByUserId(intId);
 Hibernate.initialize(user1.getSysRoles());
 user1.getSysRoles().clear();

 //授予新角色

 uService.grantRole(roleIds,user1);

//更新用户信息
 int rows=uService.updateUserinfo(user1);

最终控制台输出:

Hibernate: insert into user_role (userid, roleId) values (?, ?)
Hibernate: insert into user_role (userid, roleId) values (?, ?)

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页