hhibernate 的关联关系分为, 一对一 一对N N 对n基于单向双向 以及主键 外键
在 单向的< many -to-one > 中,设置属性 ,column 指的是 与外键关联
本表中的列名,,class 关联实体类, cascade 记录哪些操作是关联同步的,property-ref 默认指的是关联的类的主键。 fetch lazy access 同时别忘记在n端实体类添加 属性 其中 update insert 属性表示在n端的改变 不会影响到 一端
单向的 1 对n中 设置好 <set >元素,即是属性 key为外键是哪个 《one to many》中的class 即关联的类。 name 在实体类中你所生命的set集合。
综合上述两种,可以使用双向的1 -n 关联,即把上述操作加起来。
基于外键的单向一对一 是特殊的N 对一,只是把 n端的unique 设置为true 即可。
基于外键得到双向一对一 ,除上述操作外,在另一端需要设置《one-to-one 》 然后 在many -to-one 中就变成了从表。
其中有一个比上述多了一个属性 constrained 表示通过外键对主键进行约数
基于主键的单向一对一 中 设置《one to one 》,在设置的一段是没有主键生成策略的 对应与相关联的表主键决定。
<gengeerator class=foreign>
<param name="property"> id card </param>
</gengeror>
基于主键的双向一对一 中 也是双向添加
注意的 几点
cascade 的属性 有 none save-update delete all delete-orphan 通过级联功能 来实现关联表得到相应操作。
容易出错的 地方 配置文件中 class 写全名,
别忘记在实体类中 添加 《set 或者相应集合 以及 最生成策略。
assigned
用于 有自己的程序外界生成主键,native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用sequence。
Hibernate在保存对象时,生成一个UUID字符串作为主键,保证了唯一性,但其并无任何业务逻辑意义,只能作为主键,唯一缺点长度较大,32位(Hibernate将UUID中间的“-”删除了)的字符串,占用存储空间大,但是有两个很重要的优点,Hibernate在维护主键时,不用去数据库查询,从而提高效率,而且它是跨数据库的,以后切换数据库极其方便。
特点:uuid长度大,占用空间大,跨数据库,不用访问数据库就生成主键值,所以效率高且能保证唯一性,移植非常方便,推荐使用。
使用另外一个相关联的对象的主键作为该对象主键。主要用于一对一关系中。
<id name="id" column="id">
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<one-to-one name="user" class="domain.User" constrained="true" />