1.一对多的单向关联关系
配置单向的一对多关系是从"一"这一方开始的.通过one-to-many来实现.由于在一对多的关系中,需要在一方持有多方的对象,因此需通过set或 bag来实现.
如:一个教师可拥有多名学生:
教师配置文件如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="hibernate.ch08.Teacher" table="teacher" lazy="false">
<id name="id" type="integer">
<column name="id"></column>
<generator class="identity"></generator>
</id>
<property name="teacherName" type="string"></property>
<set name="students" fetch="select" cascade="save-update" lazy="false">
<key column="teacher_id"></key>
<one-to-many class="hibernate.ch08.Student"/>
<!-- inverse="true" 此属性用来更新速度,表示在执行主表teacher的更新时不更新从表student的值,如果改为false或去掉,就会更新.
这就是我们常见的student表中teacher_id值为空的情况
-->
</set>
</class>
</hibernate-mapping>
学生配置如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="hibernate.ch08.Student" table="student" lazy="false">
<id name="id" type="integer">
<column name="id"></column>
<generator class="identity"></generator>
</id>
<property name="studentName" type="string"></property>
</class>
</hibernate-mapping>
虽然这种单向操作可以满足日常需要,但也存在问题,在保存被控对象时,需要先插入空值到被关联的字段中,(如果数据库建立非空约束,将会导致失败),然后再进行更新操作.这样将一个操作分两步,降低效率.
2.多对一关联
多对一是一对多的反向,在实际中为了避免只配置一对多的关联关系时所遇到的问题.通常会将一对多的关联配置为双向的.同时将关联关系的主控方设置为"多"的一方.这样就可避免上述问题.
对于多对一的关联需要在多的一方配置many-to-one
<many-to-one mane="user" class="User" column="user_id"/>
另外为了使多的一方为主控方,需要在一的一方设置inverse="true"的配置(set里设置)
3.多对多关联
多对多关联需要借助于中间表来实现.通过中间表,将这两个表之间的多对多的关联关系转换成它们分别与中间表的一对多关联关系.那么对于Hibernate不需要中间对象来实现这种转换,但是中间表还是需要建立的.
多对多的关系是通过many-to-many进行配置的,同样是由于在一方需要持有另一方对象的集合,所以集合对象是不可少的.
<set name="roles"
cascade="save-update"
inverse="false"
table="user_role">
<many-to-many class="Role" column="role_id"/>
</set>
<set name="rsers"
cascade="save-update"
inverse="true"
table="user_role">
<many-to-many class="User" column="user_id"/>
</set>
在这里仍需要配置inverse,根据需要来确定主控方.
分享到:
相关推荐
hibernate关联关系
Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ...
Hibernate 关联关系映射分类
Hibernate关联关系练习【全】
Hibernate关联关系.docHibernate关联关系.doc
Hibernate关联关系总结 一对多 多对一 多对多
大致总结了一下Hibernate关联关系。提供相关的一些例子进行测试。
hibernate关联关系简单项目,也可以只运行Java文件不用JSP页面,运用MySQL
讲诉了关联的创建和使用 整理成了一份txt的文档 整个创建到使用的步骤都写在里面了
Hibernate关联关系映射.CHM Hibernate文档相关
Hibernate关联关系映射实例速查,帮助初学者学习。
hibernate关联关系多对一实例
详细讲解hibernate的关联关系,以及用实例讲解,非常详细
Hibernate关联关系配置,一对一,一对多,多对多,联合主键等的配置
这是个人写的hibernate关联关系的示例,备忘用,不建议下载
hibernate里关联关系映射,各种关系解析,帮助大家搞清楚hibernate的关系映射
Hibernate关联关系hbm.xml中的相关属性many-to-one/one-to-many/many-to-many 中所有属性值以及其用法。
映射一对多关联关系 以Customer和Order为例: 一对多: 每个Customer可以有一个或者多个Order,因此Customer中应该有一个集合类型的属性,来引用所有关联的Order对象。 多对一。全实例讲解
Hibernate关联关系(一对多)代码的具体实现,包括保存班级;保存学生;保存班级的时候同时保存学生;已经存在一个班级,新建一个学生,并且建立该学生和该班级之间的关系等一对多关系的情况。不足之处还望谅解
hibernate ORM的实例,包括一对一,一对多,多对一,多对多的各种实例。 还有一些HQL语句的写法