hibernate的id生成方式以及Hibernate中对类关系的处理
一、id生成方式
1,sequence 只适用于Oracle
2,identity 自增列,适用于SQLServer、MySql
3,increment 取最大值加一
4,native 根据底层数据库指定生成方法
5,高低位算法
<id name="id" column="id">
<generator table="car_pk">
<id name="id" column="id" type="integer">
<generator />
</id>
<property name="name" column="name" type="string" />
<one-to-one name="engine" cascade="all"/>
</class>
注:cascade="all" 表示增删改查Car对象时都会级联增加、删除和修改Engine对象。
级联一定是在主对象的映射文件中
b、附表Engine.hbm.xml的写法
<class name="Engine" table="engine_pk">
<id name="id" column="id" type="integer">
<generator column="model" type="string" />
<one-to-one name="car" constrained="true"/>
</class>
注:constrained="true"表示Engine应用了Car的主健作为外健。
foregin表明id的生成方式是引用表car的主键
B、外健映射:主表中用one-to-one,通过property -ref many-to-one
a、主表Car.hbm.xml的写法
<class name="Car" table="car_fk">
<id name="id" column="id" type="integer">
<generator />
</id>
<property name="name" column="name" type="string" />
<one-to-one name="engine"
property-ref="car" cascade="save-update"/>
</class>
注:name="engine" property-ref="car"表示engine表引用了car表的主健作为他的外健。
cascade="save-update"表示增改Car对象时都会级联增加和修改Engine对象。
b、附表Engine.hbm.xml的写法
<class name="Engine" table="engine_fk">
<id name="id" column="id" type="integer">
<generator />
</id>
<property name="model" column="model" type="string" />
<many-to-one name="car"
unique="ture" column="carid"/>
</class>
注:unique="ture" column="carid"表示为engine表中的外健carid加上唯一约束,使之一对多关系强制转化为一对一关系。