一、数据库,参照网上一些范例,在mysql中创建以下表
Java 代码
- -- Create the datatable named by 'RBAC_User' to save users.
- create table RBAC_User
- (
- User_ID int primary key auto_increment,
- User_Name varchar(20 ) not null ,
- User_PassWord varchar(20 ) not null ,
- User_Lock bit not null
- );
- CREATE UNIQUE INDEX IDX_User ON RBAC_User(User_Name) ;
- -- Create the datatable named by 'RBAC_Group' to save groups.
- create table RBAC_Group
- (
- Group_ID int primary key auto_increment,
- Group_Name varchar(20 ) not null ,
- Group_Description varchar(100 )
- );
- CREATE UNIQUE INDEX IDX_Group ON RBAC_Group(Group_Name) ;
- -- Create the datatable named by 'RBAC_Role' to save roles.
- create table RBAC_Role
- (
- Role_ID int primary key auto_increment,
- Role_Name varchar(20 ) not null ,
- Role_Description varchar(100 )
- );
- CREATE UNIQUE INDEX IDX_Role ON RBAC_Role(Role_Name) ;
- -- Create the datatable named by 'RBAC_Resource' to save Resources.
- create table RBAC_Resource
- (
- Resource_ID int primary key auto_increment,
- Resource_Name varchar(20 ) not null ,
- Resource_Description varchar(100 )
- );
- CREATE UNIQUE INDEX IDX_Resource ON RBAC_Resource(Resource_Name) ;
- -- Create the datatable named by 'RBAC_Operation' to save Operations.
- create table RBAC_Operation
- (
- Operation_ID int primary key auto_increment,
- Operation_Name varchar(10 ) not null ,
- Operation_Description varchar(100 )
- );
- CREATE UNIQUE INDEX IDX_Operation ON RBAC_Operation (Operation_Name);
- --Create the datatable named by 'RBAC_UserGroup' to save userGroup.
- create table RBAC_User_Group
- (
- User_Group_ID int primary key auto_increment,
- User_ID int not null ,
- Group_ID int not null ,
- constraint foreign key(User_ID) references RBAC_User(User_ID) ,
- constraint foreign key(Group_ID) references RBAC_Group(Group_ID)
- );
- CREATE UNIQUE INDEX IDX_User_Group ON RBAC_User_Group ( User_ID , Group_ID);
- -- Create the datatable named by 'RBAC_GroupRole' to save GroupRoles.
- create table RBAC_Group_Role
- (
- Group_Role_ID int primary key auto_increment,
- Group_ID int not null ,
- Role_ID int not null ,
- constraint foreign key(Group_ID) references RBAC_Group(Group_ID) ,
- constraint foreign key(Role_ID) references RBAC_Role(Role_ID)
- );
- CREATE UNIQUE INDEX IDX_Group_Role ON RBAC_Group_Role( Group_ID, Role_ID);
- -- Create the datatable named by RBAC_Authority to save authorities.
- create table RBAC_Authority
- (
- Authority_ID int primary key auto_increment,
- Resource_ID int not null ,
- Operation_ID int not null ,
- constraint foreign key(Resource_ID) references RBAC_Resource(Resource_ID) ,
- constraint foreign key(Operation_ID) references RBAC_Operation(Operation_ID)
- );
- CREATE UNIQUE INDEX IDX_Authority ON RBAC_Authority (Resource_ID, Operation_ID);
- -- Create the datatable named by RBAC_Permission to save permissions.
- create table RBAC_Permission
- (
- Permission_ID int primary key auto_increment,
- Role_ID int not null ,
- Authority_ID int not null ,
- constraint foreign key(Role_ID) references RBAC_Role(Role_ID) ,
- constraint foreign key(Authority_ID) references RBAC_Authority(Authority_ID)
- );
- CREATE UNIQUE INDEX IDX_Permission ON RBAC_Permission (Role_ID, Authority_ID);
-- Create the datatable named by 'RBAC_User' to save users.
create table RBAC_User
(
User_ID int primary key auto_increment,
User_Name varchar(20) not null,
User_PassWord varchar(20) not null,
User_Lock bit not null
);
CREATE UNIQUE INDEX IDX_User ON RBAC_User(User_Name) ;
-- Create the datatable named by 'RBAC_Group' to save groups.
create table RBAC_Group
(
Group_ID int primary key auto_increment,
Group_Name varchar(20) not null,
Group_Description varchar(100)
);
CREATE UNIQUE INDEX IDX_Group ON RBAC_Group(Group_Name) ;
-- Create the datatable named by 'RBAC_Role' to save roles.
create table RBAC_Role
(
Role_ID int primary key auto_increment,
Role_Name varchar(20) not null,
Role_Description varchar(100)
);
CREATE UNIQUE INDEX IDX_Role ON RBAC_Role(Role_Name) ;
-- Create the datatable named by 'RBAC_Resource' to save Resources.
create table RBAC_Resource
(
Resource_ID int primary key auto_increment,
Resource_Name varchar(20) not null,
Resource_Description varchar(100)
);
CREATE UNIQUE INDEX IDX_Resource ON RBAC_Resource(Resource_Name) ;
-- Create the datatable named by 'RBAC_Operation' to save Operations.
create table RBAC_Operation
(
Operation_ID int primary key auto_increment,
Operation_Name varchar(10) not null,
Operation_Description varchar(100)
);
CREATE UNIQUE INDEX IDX_Operation ON RBAC_Operation (Operation_Name);
--Create the datatable named by 'RBAC_UserGroup' to save userGroup.
create table RBAC_User_Group
(
User_Group_ID int primary key auto_increment,
User_ID int not null,
Group_ID int not null,
constraint foreign key(User_ID) references RBAC_User(User_ID) ,
constraint foreign key(Group_ID) references RBAC_Group(Group_ID)
);
CREATE UNIQUE INDEX IDX_User_Group ON RBAC_User_Group ( User_ID , Group_ID);
-- Create the datatable named by 'RBAC_GroupRole' to save GroupRoles.
create table RBAC_Group_Role
(
Group_Role_ID int primary key auto_increment,
Group_ID int not null,
Role_ID int not null,
constraint foreign key(Group_ID) references RBAC_Group(Group_ID) ,
constraint foreign key(Role_ID) references RBAC_Role(Role_ID)
);
CREATE UNIQUE INDEX IDX_Group_Role ON RBAC_Group_Role( Group_ID, Role_ID);
-- Create the datatable named by RBAC_Authority to save authorities.
create table RBAC_Authority
(
Authority_ID int primary key auto_increment,
Resource_ID int not null,
Operation_ID int not null,
constraint foreign key(Resource_ID) references RBAC_Resource(Resource_ID) ,
constraint foreign key(Operation_ID) references RBAC_Operation(Operation_ID)
);
CREATE UNIQUE INDEX IDX_Authority ON RBAC_Authority (Resource_ID, Operation_ID);
-- Create the datatable named by RBAC_Permission to save permissions.
create table RBAC_Permission
(
Permission_ID int primary key auto_increment,
Role_ID int not null,
Authority_ID int not null,
constraint foreign key(Role_ID) references RBAC_Role(Role_ID) ,
constraint foreign key(Authority_ID) references RBAC_Authority(Authority_ID)
);
CREATE UNIQUE INDEX IDX_Permission ON RBAC_Permission (Role_ID, Authority_ID);
二、用myEclipse生成pojo、dao后,对hbm.xml的配置部分修改,绕过只起关联关系的表,改为把两个一对多改为一个多对多。
Java 代码
- //RbacGroup.hbm.xml
- <set name="rbacUsers" table= "rbac_user_group" inverse= "true" lazy= "true" cascade= "save-update" >
- <key>
- <column name="Group_ID" not- null = "true" />
- </key>
- <many-to-many class = "dao.rbac.RbacGroup" column= "User_ID" />
- </set>
- <set name="rbacRoles" table= "rbac_group_role" inverse= "true" lazy= "true" cascade= "save-update" >
- <key>
- <column name="Group_ID" not- null = "true" />
- </key>
- <many-to-many class = "dao.rbac.RbacGroup" column= "Role_ID" />
- </set>
- //RbacUser.hbm.xml
- <set name="rbacGroups" table= "rbac_user_group" inverse= "false" lazy= "true" cascade= "save-update" >
- <key>
- <column name="User_ID" not- null = "true" />
- </key>
- <many-to-many class = "dao.rbac.RbacUser" column= "Group_ID" />
- </set>
- //RbacRole.hbm.xml
- <set name="rbacGroups" table= "rbac_group_role" inverse= "false" lazy= "true" cascade= "save-update" >
- <key>
- <column name="Role_ID" not- null = "true" />
- </key>
- <many-to-many class = "dao.rbac.RbacRole" column= "Group_ID" />
- </set>
//RbacGroup.hbm.xml
<set name="rbacUsers" table="rbac_user_group" inverse="true" lazy="true" cascade="save-update">
<key>
<column name="Group_ID" not-null="true" />
</key>
<many-to-many class="dao.rbac.RbacGroup" column="User_ID" />
</set>
<set name="rbacRoles" table="rbac_group_role" inverse="true" lazy="true" cascade="save-update">
<key>
<column name="Group_ID" not-null="true" />
</key>
<many-to-many class="dao.rbac.RbacGroup" column="Role_ID" />
</set>
//RbacUser.hbm.xml
<set name="rbacGroups" table="rbac_user_group" inverse="false" lazy="true" cascade="save-update">
<key>
<column name="User_ID" not-null="true" />
</key>
<many-to-many class="dao.rbac.RbacUser" column="Group_ID" />
</set>
//RbacRole.hbm.xml
<set name="rbacGroups" table="rbac_group_role" inverse="false" lazy="true" cascade="save-update">
<key>
<column name="Role_ID" not-null="true" />
</key>
<many-to-many class="dao.rbac.RbacRole" column="Group_ID" />
</set>
三、pojo中集合属性的修改,和以上配置保持一致,略...