hibernate的关联关系 以及生成策略

来源:互联网 发布:大连 谭作钧 人工智能 编辑:程序博客网 时间:2024/06/08 11:17

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" />

 






0 0
原创粉丝点击