权限管理之共享主键

来源:互联网 发布:微信淘宝优惠卷公众号 编辑:程序博客网 时间: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>


 

 

 

   这两种"共享"主键虽然一开始从名字看来很相似,但是你稍微深究一下它的含义就可以分辨出他们的区别.

 

   通过这两个名似意不似的共享主键也告诉了我们不管做什么事情都不要急于去着手做某事,而是要静下心来分析分析,很多事情都只是表面复杂而里面其实很简单.

 

 

 

原创粉丝点击