t3用户-角色-权限hibernate经典配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了t3用户-角色-权限hibernate经典配置相关的知识,希望对你有一定的参考价值。

[java] view plain copy
 
 print?
  1. 用户-角色-权限hibernate经典配置。  
[java] view plain copy
 
 print?
  1. 既然有人问起,我就写下说明吧。在文章中间的配置文件那里。权当回忆一下,也帮助更多人。这是以前学校时写的,没有注释。都是贴的代码笔记。看到的莫要见怪。欢迎学习交流。  
[java] view plain copy
 
 print?
  1.    
[java] view plain copy
 
 print?
  1. 首先是三个实体类:  
[java] view plain copy
 
 print?
  1. 用户-》角色-》权限  
[java] view plain copy
 
 print?
  1. package com.tudou.hibernates.RoleManage;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. public class User {  
  7.     private int uid;  
  8.     private String userName;  
  9.     private String nickName;  
  10.     private String password;  
  11.     private String mark;  
  12.     private Set<RoleUser> roleUsers = new HashSet<RoleUser>();  
  13.   
  14.     public User() {  
  15.         super();  
  16.     }  
  17.   
  18.     public User(String userName, String nickName, String password, String mark,  
  19.             Set<RoleUser> roleUsers) {  
  20.         super();  
  21.         this.userName = userName;  
  22.         this.nickName = nickName;  
  23.         this.password = password;  
  24.         this.mark = mark;  
  25.         this.roleUsers = roleUsers;  
  26.     }  
  27.   
  28.     public int getUid() {  
  29.         return uid;  
  30.     }  
  31.   
  32.     public void setUid(int uid) {  
  33.         this.uid = uid;  
  34.     }  
  35.   
  36.     public String getUserName() {  
  37.         return userName;  
  38.     }  
  39.   
  40.     public void setUserName(String userName) {  
  41.         this.userName = userName;  
  42.     }  
  43.   
  44.     public String getNickName() {  
  45.         return nickName;  
  46.     }  
  47.   
  48.     public void setNickName(String nickName) {  
  49.         this.nickName = nickName;  
  50.     }  
  51.   
  52.     public String getPassword() {  
  53.         return password;  
  54.     }  
  55.   
  56.     public void setPassword(String password) {  
  57.         this.password = password;  
  58.     }  
  59.   
  60.     public String getMark() {  
  61.         return mark;  
  62.     }  
  63.   
  64.     public void setMark(String mark) {  
  65.         this.mark = mark;  
  66.     }  
  67.   
  68.     public Set<RoleUser> getRoleUsers() {  
  69.         return roleUsers;  
  70.     }  
  71.   
  72.     public void setRoleUsers(Set<RoleUser> roleUsers) {  
  73.         this.roleUsers = roleUsers;  
  74.     }  
  75.   
  76. }  

 

[java] view plain copy
 
 print?
  1. package com.tudou.hibernates.RoleManage;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. public class Role {  
  7.     private int rid;  
  8.     private String roleName;  
  9.     private String dsc;  
  10.     private Set<RoleUser> roleUsers = new HashSet<RoleUser>();  
  11.     private Set<FunctionsRole> functionRoles = new HashSet<FunctionsRole>();  
  12.   
  13.     public Role() {  
  14.         super();  
  15.     }  
  16.   
  17.     public Role(String roleName, String dsc, Set<RoleUser> roleUsers,  
  18.             Set<FunctionsRole> functionRoles) {  
  19.         super();  
  20.         this.roleName = roleName;  
  21.         this.dsc = dsc;  
  22.         this.roleUsers = roleUsers;  
  23.         this.functionRoles = functionRoles;  
  24.     }  
  25.   
  26.     public int getRid() {  
  27.         return rid;  
  28.     }  
  29.   
  30.     public void setRid(int rid) {  
  31.         this.rid = rid;  
  32.     }  
  33.   
  34.     public String getRoleName() {  
  35.         return roleName;  
  36.     }  
  37.   
  38.     public void setRoleName(String roleName) {  
  39.         this.roleName = roleName;  
  40.     }  
  41.   
  42.     public String getDsc() {  
  43.         return dsc;  
  44.     }  
  45.   
  46.     public void setDsc(String dsc) {  
  47.         this.dsc = dsc;  
  48.     }  
  49.   
  50.     public Set<RoleUser> getRoleUsers() {  
  51.         return roleUsers;  
  52.     }  
  53.   
  54.     public void setRoleUsers(Set<RoleUser> roleUsers) {  
  55.         this.roleUsers = roleUsers;  
  56.     }  
  57.   
  58.     public Set<FunctionsRole> getFunctionRoles() {  
  59.         return functionRoles;  
  60.     }  
  61.   
  62.     public void setFunctionRoles(Set<FunctionsRole> functionRoles) {  
  63.         this.functionRoles = functionRoles;  
  64.     }  
  65.   
  66. }  

 

[java] view plain copy
 
 print?
  1. package com.tudou.hibernates.RoleManage;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. public class Functions {  
  7.     private int fid;  
  8.     private String functionName;  
  9.     private String mark;  
  10.     private Set<FunctionsRole> functionRoles = new HashSet<FunctionsRole>();  
  11.   
  12.     public Functions(String functionName, String mark,  
  13.             Set<FunctionsRole> functionRoles) {  
  14.         super();  
  15.         this.functionName = functionName;  
  16.         this.mark = mark;  
  17.         this.functionRoles = functionRoles;  
  18.     }  
  19.   
  20.     public Functions() {  
  21.         super();  
  22.     }  
  23.   
  24.     public int getFid() {  
  25.         return fid;  
  26.     }  
  27.   
  28.     public void setFid(int fid) {  
  29.         this.fid = fid;  
  30.     }  
  31.   
  32.     public String getFunctionName() {  
  33.         return functionName;  
  34.     }  
  35.   
  36.     public void setFunctionName(String functionName) {  
  37.         this.functionName = functionName;  
  38.     }  
  39.   
  40.     public String getMark() {  
  41.         return mark;  
  42.     }  
  43.   
  44.     public void setMark(String mark) {  
  45.         this.mark = mark;  
  46.     }  
  47.   
  48.     public Set<FunctionsRole> getFunctionRoles() {  
  49.         return functionRoles;  
  50.     }  
  51.   
  52.     public void setFunctionRoles(Set<FunctionsRole> functionRoles) {  
  53.         this.functionRoles = functionRoles;  
  54.     }  
  55.   
  56. }  

 

用户-角色-权限关系如下:

一个用户user对应多个角色role,一个角色对应多个用户,关系为多对多many-to-many

一个角色role对应多个权限functions,一个权限也对应多个角色。

这个自不必说。

主要是如何维护呢。

如下所示:

多对多必然产生中间表进行关联。

user与role产生中间表userRole。则user与userRole的关系为one-to-many。理解为一个用户可以有多个权限对应。role与userRole的关系为one-to-many。理解为一个权限可以有多个用户对应。

其次就是角色role与权限function,中间表为roleFunction,他们之前的关系如上。

只不过role表在中间,即与user表是多对多的关系,又与function表是多对多的关系。所以role会产生2张中间表,一张userRole,一张roleFunction而已。

role与这2张中间表都是one-to-many的关系,反之,它们与role却都是many-to-one的关系。

 

user->userRole->role->roleFunction->function

user->userRole一对多,role->userRole一对多,则user->role多对多

role->roleFunction一对多,function->roleFunction一对多,则role->function多对多

说白了就是把2个多对多,分解成了4个一对多【其实就是2对一对多】而已。

 

这样写来。再看配置,则是一目了然了。

 

[html] view plain copy
 
 print?
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping package="com.tudou.hibernates.RoleManage">  
  7.     <class name="User" table="tb_user">  
  8.         <id name="uid" column="uid">  
  9.             <generator class="native" />  
  10.         </id>  
  11.         <property name="userName"></property>  
  12.         <property name="nickName"></property>  
  13.         <property name="password"></property>  
  14.         <property name="mark"></property>  
  15.         <set name="roleUsers" cascade="save-update" inverse="true">  
  16.             <key>  
  17.                 <column name="uid"></column>  
  18.             </key>  
  19.             <one-to-many class="RoleUser" />  
  20.         </set>  
  21.     </class>  
  22. </hibernate-mapping>  

 

[html] view plain copy
 
 print?
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping package="com.tudou.hibernates.RoleManage">  
  7.     <class name="Role" table="tb_role">  
  8.         <id name="rid" column="rid">  
  9.             <generator class="native">  
  10.             </generator>  
  11.         </id>  
  12.         <property name="roleName" />  
  13.         <property name="dsc" />  
  14.   
  15.         <set name="roleUsers" cascade="save-update" inverse="true">  
  16.             <key>  
  17.                 <column name="rid"></column>  
  18.             </key>  
  19.             <one-to-many class="RoleUser" />  
  20.         </set>  
  21.         <set name="functionRoles" cascade="save-update" inverse="true">  
  22.             <key>  
  23.                 <column name="rid"></column>  
  24.             </key>  
  25.             <one-to-many class="FunctionsRole" />  
  26.         </set>  
  27.     </class>  
  28. </hibernate-mapping>  

 

[html] view plain copy
 
 print?
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping package="com.tudou.hibernates.RoleManage">  
  7.   
  8.     <class name="RoleUser" table="role_user">  
  9.         <id name="ru_id" column="ru_id">  
  10.             <generator class="native" />  
  11.         </id>  
  12.         <many-to-one name="role" class="Role" cascade="save-update"  
  13.             fetch="select">  
  14.             <column name="rid"></column>  
  15.         </many-to-one>  
  16.         <many-to-one name="user" class="User" cascade="save-update"  
  17.             fetch="select">  
  18.             <column name="uid"></column>  
  19.         </many-to-one>  
  20.     </class>  
  21. </hibernate-mapping>  

 

[html] view plain copy
 
 print?
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping package="com.tudou.hibernates.RoleManage">  
  7.   
  8.     <class name="FunctionsRole" table="functions_role">  
  9.         <id name="fr_id" column="fr_id">  
  10.             <generator class="native" />  
  11.         </id>  
  12.         <many-to-one name="functions" class="Functions" cascade="save-update"  
  13.             fetch="select">  
  14.             <column name="fid"></column>  
  15.         </many-to-one>  
  16.         <many-to-one name="role" class="Role" cascade="save-update"  
  17.             fetch="select">  
  18.             <column name="rid"></column>  
  19.         </many-to-one>  
  20.     </class>  
  21. </hibernate-mapping>  

 

 

[java] view plain copy
 
 print?
  1. package com.tudou.hibernates.RoleManage;  
  2.   
  3. public class RoleUser {  
  4.     private int ru_id;  
  5.     private Role role;  
  6.     private User user;  
  7.   
  8.     public RoleUser(Role role, User user) {  
  9.         super();  
  10.         this.role = role;  
  11.         this.user = user;  
  12.     }  
  13.   
  14.     public RoleUser() {  
  15.         super();  
  16.     }  
  17.   
  18.     public int getRu_id() {  
  19.         return ru_id;  
  20.     }  
  21.   
  22.     public void setRu_id(int ruId) {  
  23.         ru_id = ruId;  
  24.     }  
  25.   
  26.     public Role getRole() {  
  27.         return role;  
  28.     }  
  29.   
  30.     public void setRole(Role role) {  
  31.         this.role = role;  
  32.     }  
  33.   
  34.     public User getUser() {  
  35.         return user;  
  36.     }  
  37.   
  38.     public void setUser(User user) {  
  39.         this.user = user;  
  40.     }  
  41.   
  42. }  



 

 

[html] view plain copy
 
 print?
    1. package com.tudou.hibernates.RoleManage;  
    2.   
    3. public class FunctionsRole {  
    4.     private int fr_id;  
    5.     private Functions functions;  
    6.     private Role role;  
    7.   
    8.     public FunctionsRole() {  
    9.         super();  
    10.     }  
    11.   
    12.     public FunctionsRole(Functions functions, Role role) {  
    13.         super();  
    14.         this.functions = functions;  
    15.         this.role = role;  
    16.     }  
    17.   
    18.     public int getFr_id() {  
    19.         return fr_id;  
    20.     }  
    21.   
    22.     public void setFr_id(int frId) {  
    23.         fr_id = frId;  
    24.     }  
    25.   
    26.     public Functions getFunctions() {  
    27.         return functions;  
    28.     }  
    29.   
    30.     public void setFunctions(Functions functions) {  
    31.         this.functions = functions;  
    32.     }  
    33.   
    34.     public Role getRole() {  
    35.         return role;  
    36.     }  
    37.   
    38.     public void setRole(Role role) {  
    39.         this.role = role;  
    40.     }  
    41.   
    42. }  


以上是关于t3用户-角色-权限hibernate经典配置的主要内容,如果未能解决你的问题,请参考以下文章

经典角色权限系统设计五张表及拓展应用

Spring/Hibernate 应用程序中的角色/权限

spring security 使用hibernate和jsf认证不同的配置文件和权限

Hibernate - 具有枚举角色的用户由第三个表处理

Hibernate多对多关系映射

Hibernate 多对多