权限管理之共享主键
来源:互联网 发布:微信淘宝优惠卷公众号 编辑:程序博客网 时间:2024/06/06 13:17
在做权限管理的过程中,需要用到共享主键,因为三个主体的id就是使用的共享主键,第一开始想到的就是hibernate的共享主键,小小研究了一下,发现hibernate的共享主键是多个表对应一个id,而我所需的“共享主键”是多个表的id依次递增。
hibernate的共享主键
hibernate的共享主键是利用one-to-one标签和foreign策略来生成的。
举个例子:
比如一个人用户表,包含的信息很多,这时不常使用的字段就可以单独成一张表,其主键也是外键(主键生成策略为外键生成策略).
User.hbm.xml
<hibernate-mapping> <class name="com.pojo.User"table="T_USERS" schema="ZM"> <id name="id"type="java.lang.Long"> <column name="ID"precision="4" scale="0" /> <generatorclass="increment"></generator> </id> <property name="username"type="java.lang.String"> <columnname="USERNAME" length="100" /> </property> <property name="password"type="java.lang.String"> <columnname="PASSWORD" length="100" /> </property> <!-- 一对一关联 --> <one-to-one name="profile"class="com.pojo.Profile"></one-to-one> </class></hibernate-mapping>
Profile.hbm.xml
<hibernate-mapping> <class name="com.pojo.Profile"table="T_PROFILE" schema="ZM"> <id name="id"type="java.lang.Long"> <column name="ID"precision="4" scale="0" /> <!-- 主键外键生成 --> <generatorclass="foreign"> <paramname="property">user</param> </generator> </id> <property name="email"type="java.lang.String"> <column name="EMAIL"length="100" /> </property> <property name="phone"type="java.lang.String"> <column name="PHONE"length="100" /> </property> <property name="address"type="java.lang.String"> <column name="ADDRESS"length="100" /> </property> <one-to-one name="user"class="com.pojo.User"></one-to-one> </class></hibernate-mapping>
递增共享主键
其实我所说的这个递增的共享主键叫做“共享序列”更为贴切。
举个例子:
用户表和角色表为了方便管理而使用同一个序列(主键生成策略使用序列),也就是这两个表的主键是依次递增的.
User.hbm.xml
<hibernate-mapping> <classname="com.core.permission.po.User" table="T_USER"> <id name="id"type="java.lang.Long"> <column name="ID"/> <generatorclass="sequence"> <paramname="sequence">NMS_SEQ_MAINBODY_ID</param> </generator> </id> <property name="username"type="java.lang.String"> <columnname="USERNAME" /> </property> <property name="password"type="java.lang.String"> <columnname="PASSWORD" /> </property> <propertyname="authorizeType" type="java.lang.String"> <columnname="AUTHORIZE_TYPE" /> </property> <propertyname="extendsType" type="java.lang.String"> <columnname="EXTENDS_TYPE"/> </property> </class></hibernate-mapping>
Role.hbm.xml
<hibernate-mapping> <classname="com.core.permission.po.Role" table="T_ROLE"> <id name="id"type="java.lang.Long"> <column name="ID"/> <generatorclass="sequence"> <paramname="sequence">NMS_SEQ_MAINBODY_ID</param> </generator> </id> <property name="name"type="java.lang.String"> <column name="NAME"/> </property> </class></hibernate-mapping>
这两种"共享"主键虽然一开始从名字看来很相似,但是你稍微深究一下它的含义就可以分辨出他们的区别.
通过这两个名似意不似的共享主键也告诉了我们不管做什么事情都不要急于去着手做某事,而是要静下心来分析分析,很多事情都只是表面复杂而里面其实很简单.
- 权限管理之共享主键
- Windows共享权限和相关管理
- 项目管理之权限管理
- 权限管理之视图
- oracle之权限管理
- OA之权限管理
- .NET之权限管理
- 回忆录之权限管理
- mysql之权限管理
- MySQL之权限管理
- MySQL之权限管理
- MySQL之权限管理
- MySQL之权限管理
- MySQL之权限管理
- MySQL之权限管理
- 共享文件之共享权限和ntfs权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- XmlSerializer 常见问题
- 苹果面试8大难题及答案
- SecureCRT中解决SQLPLUS上下左右键问题
- sqlite3使用简介
- 线程优先级关联性
- 权限管理之共享主键
- JSTL 标签库详细介绍资料
- Powershell Multiline Mode
- 不能发表相片啊
- .NET日记——SQL基本语句
- 安卓Android控件ListView获取item中EditText值
- broadcastreceiver接受数据 动态创建控件
- codeviz 过程分析
- SSD固态硬盘的安装优化点点收集