increment 适用于代理主键。由Hibernate自动以递增的方式生成标识符,每次增量为1
由于increment生成标识符的机制不依赖于底层数据库系统,因此它适合所有的数据库系统。
适用于只有单个Hibernate应用进程访问同一个数据库的场合,在集群环境下不推荐使用。
OID必须为long、int或short类型。
使用方式:
<id name="id" type="java.lang.Integer" column="
id">
<generator class="increment"/>
</id>
<generator class="increment"/>
</id>
identity 适用于代理主键。有底层数据库生成标识符。前提是底层数据库支持自动增长字段类型。
OID必须为long、int或short类型。
使用方式:
<id name="id" type="java.lang.Integer" column="id">
<generator class="identity"/>
</id>
<generator class="identity"/>
</id>
sequence适用于代理主键。Hibernate根据底层数据库序列生成标识符。前提是底层数据库支持序列。
OID必须为long、int或short类型
使用方式:
<id name="id" type="java.lang.Integer" column="id">
<generator class="sequence"/>
</id>
<generator class="sequence"/>
</id>
hilo适用于代理主键。Hibernate根据high/low算法生成标识符。Hibernate把特定表的字段作为"high"值。在默认情况下选择hibernate_unique_key表的next_hi字段。
由于hilo生成标识符机制不依赖于底层数据库系统,因此适用于所有数据库系统。OID必须为long、int或short类型。
使用方式:
<id name="id" type="java.lang.Integer" column="id">
<generator class=" hilo"/>
</id>
<generator class=" hilo"/>
</id>
native适用于代理主键。根据底层数据库对自动生成标识符的支持能力,来选择identity、sequence或hilo。
使用方式:
<id name="id" type="java.lang.Integer" column="id">
<generator class="native"/>
</id>
<generator class="native"/>
</id>
uuid.hex 适用于代理主键。Hibernate采用128位的UUID算法生成标识符。UUID算法能够在网络环境中生成唯一的字符串标识符。这种标识符生成策略并不流行,因为字符串类型主键比整数类型的主键占有更多的数据空间。
使用方式:
<id name="id" type="java.lang.Integer" column="id">
<generator class="uuid.hex"/>
</id>
<generator class="uuid.hex"/>
</id>
assigned适用于自然主键。由Java应用程序负责生成标识符,为了能让Java应用程序设置OID,不能把setId()方法声明为private类型。应该尽量避免使用自然主键。
使用方式:
<id name="id" type="java.lang.Integer" column="id">
<generator class="assigned"/>
</id>
<generator class="assigned"/>
</id>
映射复合自然主键:
使用方式:
<composite-id>
<!-- key-property标签表示哪一些属性对应复合主键 -->
<key-property name="id" column="id" type="string"></key-property>
<key-property name="name" column="name" type="string"></key-property>
</composite-id>
<!-- key-property标签表示哪一些属性对应复合主键 -->
<key-property name="id" column="id" type="string"></key-property>
<key-property name="name" column="name" type="string"></key-property>
</composite-id>
实体类必须实现java.io.Serializable接口,并重新定义equal()和hashcode方法。equal方法判断两个实体类对象相等的条件为:这两个实体类两个属性都相等。