标识符生成器 | 描述 |
increment | 适用于代理主键。由Hibernate自动以递增的方式生成标识符,每次增量为1 |
identity | 适用于代理主键。由底层数据库生成标识符,前提条件是底层数据库支持自动增长字段类型 |
sequence | 适用于代理主键。Hibernate根据底层数据库的序列来生成标识符。前提条件是底层是据库支持序列 |
hilo | 适用于代理主键。Hibernate根据high/low算法来生成标识符。Hibernate把特定表的字段作为“high”值。在默认情况下选用hibernate_unique_key表的next_hi字段 |
native | 适用于代理主键。根据底层数据库对自动生成标识符的支持能力,来选择identity,sequence或hilo |
uuid.hex | 适用于代理主键。Hibernate采用128位的UUID(Universal Unique Identification)算法来生成标识符。该算法能够在网络环境中生成惟一的字符串标识符。这种标识符策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间。 |
assigned | 使用于自然主键。由Java应用程序负责生成标识符,为了能让Java应用程序设置OID,不能把setId()方法声明为private类型。应该尽量避免使用自然主键。 |
在User.hbm.xml文件中配置如下:
<hibernate-mapping>
<class name="com.yourcompany.hibernate.commons.User" table="user" catalog="info">
<id name="id" type="java.lang.Integer">
<column name="id" length="20" />
<generator class="increment" />
</id>
<property name="userName" type="java.lang.String">
<column name="userName" length="20" />
</property>
<property name="passWord" type="java.lang.String">
<column name="passWord" length="20" />
</property>
</class>
</hibernate-mapping>
如果使用的是联合主键,配置格式如下,注意主键类应实现Serializable接口:
<hibernate-mapping>
<class name="com.yourcompany.hibernate.commons.User" table="user" catalog="info">
<composite-id name="primaryKey" class="com.yourcompany.bean.PrimaryKey">
<key-property name="userName" column="userName" type="string"></key-property>
<key-property name="position" column="position" type="string"></key-property>
</composite-id>
<property name="passWord" type="java.lang.String">
<column name="passWord" length="20" />
</property>
</class>
</hibernate-mapping>