最近做一個(gè)OA系統(tǒng),用到了Hibernate框架,我發(fā)現(xiàn),權(quán)限和角色的關(guān)系是一種多對(duì)多的關(guān)系,一個(gè)權(quán)限可以分配給多個(gè)角色,一個(gè)角色擁有多個(gè)權(quán)限,
Hibernate單向多對(duì)多
。多對(duì)多關(guān)系有兩種,一種是單向的,一種是多向的。對(duì)于這個(gè)問題,曾經(jīng)讓我很犯難。單純?cè)谡Z(yǔ)言上理解,會(huì)比較復(fù)雜,而從代碼上理解,可能就會(huì)明白了。
下面模擬為角色授權(quán)的過程:
1,Hibernate使用Annotation
2,使用Junit進(jìn)行測(cè)試。
3,使用Mysql作為后臺(tái)數(shù)據(jù)庫(kù)。
4,Hibernate不使用自動(dòng)建表,也不采用反向工程。
過程 :
1,建表:
數(shù)據(jù)表結(jié)構(gòu)采用如圖所示:
SQL語(yǔ)句:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE role( #角色表
RoleId INT PRIMARY KEY AUTO_INCREMENT , #角色I(xiàn)D
RoleName VARCHAR(20) NOT NULL #角色名稱
) ;
CREATE TABLE privilege( #權(quán)限表
PrivilegeId INT PRIMARY KEY , #權(quán)限ID
PrivilegeName VARCHAR(45) NOT NULL #權(quán)限表
) ;
CREATE TABLE privilege_role( #權(quán)限_角色中間表
RoleId INT ,
PrivilegeId INT ,
PRIMARY KEY (RoleId,PrivilegeId) ,
CONSTRAINT fk_privilege_role FOREIGN KEY(RoleId) REFERENCES role(RoleId) ,
CONSTRAINT fk_role_privilege FOREIGN KEY(PrivilegeId) REFERENCES privilege(PrivilegeId)
) ;
2,hibernate.cfg.xml文件:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15