三,一对一关系映射:
1,假如是主键一对一用来映射:也就是说被动方的主键是来自于主动方的主键,也可以将之称之为外键:
类之间相互添加彼此的应用。
映射文件中主动方,增加一对一标签:
<one-to-one name="userinfo" cascade="all" class="com.ljh.hibernate.pojo.UserInfo"></one-to-one>
被动方,主键又是外键,也添加一对一的映射标签:
<id name="uid" column="uid">
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<!--
描述一对一关系关系映射
constrained="true" : 表示强制要求一对一使用外键关联。增加外键约束。
-->
<one-to-one name="user" constrained="true" class="com.ljh.hibernate.pojo.User"></one-to-one>
2,使用外键约束,其实是多对一的特殊情况,例如学生对班级,
类添加彼此的应用。
映射文件中学生端主动端,添加外键进行约束,添加多对一标签,
<!--
unique : 唯一约束
如果外键含有unique约束,那么表示主动方和被动方的关系为一对一。
对于一对一映射来讲,可以设置级联关系为delete 和 all
根据主动方查询被动方关联数据,是支持延迟加载的。
-->
<many-to-one name="classes" column="cid" unique="true" cascade="all" class="com.ljh.hibernate.pojo.Classes"></many-to-one>
班级端的映射文件:添加一对一的标签:
<one-to-one name="student" cascade="all" property-ref="classes" class="com.ljh.hibernate.pojo.Student"></one-to-one>
四,多对多的关系,例如学生对课程的对应,在数据库中会生成第三张表进行维护:
在各自的类中引入对方的set集合,表示多对多。
学生端:
<set name="courseSet" table="t_student_course" cascade="save-update">
<key column="sid"></key>
<many-to-many class="com.ljh.hibernate.pojo.Course" column="cid"></many-to-many>
</set>
课程端:
<!--
对于多对多来讲,级联只能设置cascade="save-update"是合理的
inverse="true" 让集合一端去维护中间表数据。任意一端都可以。
-->
<set name="studentSet" table="t_student_course" cascade="save-update" inverse="true">
<key column="cid"></key>
<many-to-many class="com.ljh.hibernate.pojo.Student" column="sid"></many-to-many>
</set>
五,联合主键的映射,这种情况很少见,看一下如何吧,
出现了这种联合键时,需要我们为其定义一个联合主键的类(实现Serializable接口),类中声明多个字段的属性,表示联合主键字段。
在配置映射文件时,主键的配置利用联合主键的标签即可:
composite-id name="id"><key-property name="title"></key-property>
<key-property name="author"></key-property>
</composite-id>
综上,为Hibernate中对数据库进行关联设置映射时的几个简单例子,主要是我们根据实际情况,掌握几个对应标签的使用,还有就是里边的属性的使用。像lazy,cascade,fetch等等。注意观察其中的不同。这样进行了关联设置我们就可以很好的,根据类生成数据库,对数据库中的数据进行关联操作,更加合理化!