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 class="sequence" >
<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"
class="com.mmif.ORM.MMIFFunction"/>
</set>
</class>
</hibernate-mapping>
注意set中个各个属性:
name是ORM中的属性名
table是关系表名,是DB中真实的表名,使用时需要直接用它拼SQL语句的
lazy表示是否延迟加载,理解成如果选true,系统在加载hibernate的时候就把本配置文件中表示的两者关系加载了,相应的SQL语句已经执行了。如果选false,系统只会在调用当前配置文件中的两者关系是才会执行相应的SQL查询数据等。
cascade就是表示级联操作的等级,是all或者update或者delete,不列举了
key表示当前表在关系表中的外键名称,可以是多个。必须是DB中真实的名称
many-to-many表示多对多的关系类型
column表示加载项在关系表中的外键名称,必须是DB中真实的名称
class表示加载项的ORM
<?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 class="sequence" >
<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的配置就完成了,下面就是在系统中的应用了,大家应该都了解了。
记录以备查阅。
分享到:
相关推荐
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
Hibernate学习:单向多对一关联 工程
该资源包含了一些常用的hibernate关联映射实例。包括一对多,多对多,继承映射,等,是学习hibernate的必备品
Hibernate学习要点:一对一主键关联双向
是用hibernate实现一对多的关联对初学javaee有一定的帮助希望大家努力学习呀
Hibernate一对一数据关联 Hibernate下的多对多关系 Hibernate关系映射 Hibernate继承关系映射 Hibernate映射类型-主键生成器-核心API Hibernate3 插件Eclipse配置
免积分的资源,希望可以帮到大家,这是我学习hibernate时候,自己写的代码。希望大家学业有成。
hibernate多对一关联映射(Hibernate_Many2One) 7 hibernate一对一主键关联映射(单向关联Person---->IdCard) 8 hibernate一对一主键关联映射(双向关联Person<---->IdCard) 9 hibernate一对一唯一外键关联映射...
主要介绍了hibernate一对多关联映射学习小结,需要的朋友可以参考下
008 多对一 关联映射 009 一对一 主键关联映射_单向 010 一对一 主键关联映射_双向 011 一对一 唯一外键关联映射_单向 012 一对一 唯一外键关联映射_双向 013 session_flush 014 一对多关联映射 单向 015 一对多关联...
博文链接:https://ag-bruce.iteye.com/blog/213436
如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多的一端来维护关联关系。 加上inverse="true"这个属性,就可以强制在多的一端维护关系了。
Hibernate 实体关联关系映射 学习总结 把一对一 一对多 单向 双向 主键 外键 链接表等讲的比较清楚
使用hibernate的多对一,一对多的关联,用idea环境搭建,适合刚刚开始学习hibernate搭建的同学看看
案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有... 一对一、多对一、一对多、多对多等几种情况。
Hibernate实体关联关系映射--学习总结,让同仁们更好的学习Hiebernate
第四课:hibernate多对一关联映射 ...................... Spring: 第一课:构建Spring的环境并建立一个例子 第三课:spring Bean的作用域 第四课:spring对AOP的只是(采用Annotation的方式) 第五课:spring对AOP...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...