hibernate的id生成方式以及Hibernate中对类关系的处理

一、id生成方式

1,sequence只适用于Oracle

2,identity自增列,适用于SQLServer、MySql

3,increment取最大值加一

4,native根据底层数据库指定生成方法

5,高低位算法

<idname="id"column="id">

<generatorclass="hilo">

<paramname="table">high_value</param>

<paramname="column">next_value</param>

<paramname="max_lo">150</param>

</generator>

</id>

以上是hilo算法的普通形式,不适合用于squenece

在一个会话中保存多个对象

二、Hibernate中对类关系的处理:

one―to―one关系在数据库中如何体现,在JavaBean中如何体现,在

Hibernate中如何映射one-to-one关系。

1、数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束(外健关联)。或者是两个表共享一个主健,表现为子表中的pk同时引用了父表的pk作外健而存在(主健关联,子表中的pk和fk为一个字段)。

2、javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。

3、在hibernate中:

A、主健映射:都是one-to-one要用foreign生成策略。

以汽车car和发动机Engine(一对一关系)为例:

a、主表Car.hbm.xml的写法

<classname="Car"table="car_pk">

<idname="id"column="id"type="integer">

<generatorclass="native"/>

</id>

<propertyname="name"column="name"type="string"/>

<one-to-onename="engine"class="Engine"cascade="all"/>

</class>

注:cascade="all"表示增删改查Car对象时都会级联增加、删除和修改Engine对象。

级联一定是在主对象的映射文件中

b、附表Engine.hbm.xml的写法

<classname="Engine"table="engine_pk">

<idname="id"column="id"type="integer">

<generatorclass="foreign">

<paramname="property">car</param>

</generator>

</id>

<propertyname="model"column="model"type="string"/>

<one-to-onename="car"class="Car"constrained="true"/>

</class>

注:constrained="true"表示Engine应用了Car的主健作为外健。

foregin表明id的生成方式是引用表car的主键

B、外健映射:主表中用one-to-one,通过property-refmany-to-one

a、主表Car.hbm.xml的写法

<classname="Car"table="car_fk">

<idname="id"column="id"type="integer">

<generatorclass="native"/>

</id>

<propertyname="name"column="name"type="string"/>

<one-to-onename="engine"class="Engine"

property-ref="car"cascade="save-update"/>

</class>

注:name="engine"property-ref="car"表示engine表引用了car表的主健作为他的外健。

cascade="save-update"表示增改Car对象时都会级联增加和修改Engine对象。

b、附表Engine.hbm.xml的写法

<classname="Engine"table="engine_fk">

<idname="id"column="id"type="integer">

<generatorclass="native"/>

</id>

<propertyname="model"column="model"type="string"/>

<many-to-onename="car"class="Car"

unique="ture"column="carid"/>

</class>

注:unique="ture"column="carid"表示为engine表中的外健carid加上唯一约束,使之一对多关系强制转化为一对一关系。

相关推荐