首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Hibernate 学习之 多对多联系关系

2013-02-19 
Hibernate 学习之 多对多关联Hibernate的关联关系看上去非常的头疼,不静下心来好好理理还是搞不清楚他到底

Hibernate 学习之 多对多关联
Hibernate的关联关系看上去非常的头疼,不静下心来好好理理还是搞不清楚他到底什么什么玩意的。
背景:用户和权限(Function)之间的关系是多对多的关系,即一个一个用户可以有多个Function,而一个function也可以被多个用户所有。
问题:如何是用Hibernate来方便的维护二者之间的关系?

表建立:
FUNCTION表用来存储所有的function:

CREATE TABLE "MYTRX"."FUNCTION"(ID NUMBER NOT NULL,FUNC_NAME varchar2(20) NOT NULL,    CONSTRAINT FUNCTION_PK primary key (ID));

USER_INFO表用来存储所有的user信息:
CREATE TABLE "MYTRX"."USER_INFO"(ID NUMBER NOT NULL,USER_NAME varchar2(20) NOT NULL,    CONSTRAINT USER_INFO_PK primary key (ID)); 

我们还需要一个关系表USER_FUNCTION来存储两者的关系:
CREATE TABLE "MYTRX"."USER_FUNCTION"(USER_ID NUMBER NOT NULL,//这里应该是外键FUNC_ID NUMBER NOT NULL,//这里应该是外键   CONSTRAINT USER_FUNCTION_PK primary key (USER_ID, FUNC_ID))

其实只要Hibernate中主外键的关系设好了,DB层的主外键关系就无所谓了,因为事物关系通过Hibernate实现了。

ORM就是简单的属性构造器,我就不列举了。必须要注意的是在Function的ORM中必须要有一个private Set user=new HashSet();属性用来存储当前function被哪些user拥有,同样在User Info的ORM中必须要有一个private Set function=new HashSet();属性用来存储当前的user拥有哪些function。

看配置文件:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.mmif.ORM.MMIFAdmin" table="USER_INFO" catalog="MYTRX">        <id name="id" type="java.lang.Integer">            <column name="ID" />            <generator >            <param name="sequence">S_USER_INFO_ID</param>            </generator>        </id>        <property name="userName" type="java.lang.String">            <column name="USER_NAME" length="20" />        </property>              <set name="function"             table="USER_FUNCTION"             lazy="false"             cascade="all">            <key column="USER_ID" not-null="true"/>            <many-to-many column="FUNC_ID"                          name="code"><?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.mmif.ORM.MMIFFunction" table="FUNCTION" catalog="MYTRX">        <id name="id" type="java.lang.Integer">            <column name="ID" />            <generator >            <param name="sequence">S_FUNCTION_ID</param>            </generator>        </id>        <property name="funcName" type="java.lang.String">            <column name="FUNC_NAME" length="20" />        </property>                 <set name="user"             inverse="true"             lazy="false"             table="USER_FUNCTION">            <key column="FUNC_ID"/>            <many-to-many column="USER_ID"                          class="com.mmif.ORM.MMIFAdmin"/>        </set>    </class></hibernate-mapping>

这里多了一个属性 inverse="true",表示是谁触发更新的意思。

自此hibernate的配置就完成了,下面就是在系统中的应用了,大家应该都了解了。

记录以备查阅。

热点排行