例如:多个用户有多个角色,多角色下有多个用户。
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 (?, ?)