javaEE 用户、部门、角色、权限实体的关系设计与hibernate映射配置文件关系总结

22 篇文章 1 订阅
19 篇文章 0 订阅


文章中的项目文件已经放到Github上,欢迎大家Follow,star,

地址:https://github.com/lawlite19/SmartEducation


一:设计实体,我这里通过uml设计,然后直接可以生成java实体类(方便查看各个类的关系)

(1)用户登录类User与用户详细信息类UserDetails为一对一关系;

(2)用户详细信息类UserDetails与部门为多对一关系;(一个部门有多个用户)

(3)部门类是自关联的,有上级部门;

(3)用户详细类UserDetails与角色类Role为多对多的关系;(一个用户可有多个角色,一个角色也可对应多个用 户)

(4)角色类Role与权限类Privilege类为多对多关系;(一个角色可有多个权限,一个权限也可对应多个角色)

(5)权限类是自关联的,因为分为若干级权限。


然后直接可以到处java实体类,



然后拷贝到MyEclipse中,生成get、set方法

二:写hibernate的hbm.xml映射文件,普通的属性切分两屏对着写就行了,主要说下实体之间对应的关系


(1)用户类与用户信息类为一对一,我用的外键关联(即用户表中存有用户信息表的主键Id)

在用户信息类中有user属性:(cascade是级联)

在用户表中有userDetails属性,指明创建数据库表时列名colum="UserDetails_Id"


(2)部门类和用户信息类是多对一

在用户信息类中有department属性,对应表中存储部门的Id:


在部门类中有userDetails属性,key为指明对应的列:


(3)用户信息类与角色类为多对多

用户信息类中有roles属性,指明中间表为T_UserDetails_Role:(多对多关系需要创建一个中间表,分别存储两个表的主键Id)

key指明对应的列,

角色类中有userDetails属性


(4)也是多对多,与上相同



(5)部门自关联,上级部门为多对一,下级部门则为一对多

(6)权限自关联,与上相同


三:测试,在创建sessionFactory的时候创建表,写个JUnit测试执行



(1)发现表自动创建成功,下面我们主要检查一下关系对应的是否正确


(2)正确


(3)正确


(4)正确


(5)正确


(6)正确


(7)正确


(8)正确


四、总结

主要总结一下关系的对应:

(1)一对一(外键)
    主表
<many-to-one name="" class="" column="" unique="true">
    副表
<one-to-one name="" class="" cascade="all"></one-to-one>

(2)一对多
<set name="">
<key column=""></key>
<one-to-many class="" />
</set>

(3)多对一
<many-to-one name="" class="" column="">
</many-to-one>

(4)多对多
<set name="" table="">
<key column=""></key>
<many-to-many class="" column=""></many-to-many>
</set>

一对多和多对多要有set,多对多中要多table和column属性

步骤:

1、写注释对应关系

即:xx属性,本类与yy类的zz关系

2、将上面的模板拷贝

3、填写:(1)name---->xx

 (2)class---->yy

 (3)

1)many-to-one中column---->yy_Id(看个人习惯)

2)one-to-many中key----->对方many-to-one中的column属性

3)many-to-many中key---->本对象_Id(看个人习惯)

     many-to-many中column---->yy_Id

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值