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加上唯一约束,使之一对多关系强制转化为一对一关系。