hibernate有多种生成主键策略;例如assigned、increment、hilo、seqhilo、sequence、identity、native、uuid、guid等方法;其中native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式;灵活性很强。如果能支持identity则使用identity;如果支持sequence则使用sequence。mysql使用identity;Oracle使用sequence。
对应hbm.xml中的配置也相对简单;如下。
在项目开发/移植阶段到达梦数据库 需要替换为达梦的jdbc驱动包以及dialect包。
驱动包在达梦的安装目录dmdbmsdriversjdbc下。版本的对应关系查看readme.txt。
举例;hibernate.cfg.xml
<!-- 这个属性使 Hibernate 应用为被选择的数据库生成适当的 SQL -->
<property name=;hibernate.dialect;>org.hibernate.dialect.DmDialect</property>
<!-- JDBC 驱动程序类 -->
<property name=;hibernate.connection.driver_class;>dm.jdbc.driver.DmDriver</property>
<!-- Assume test is the database name -->
<!-- 数据库实例的 JDBC URL -->
<property name=;hibernate.connection.url;>jdbc:dm://192.168.11.123:5236</property>
<!-- 数据库用户名 -->
<property name=;hibernate.connection.username;>SYSDBA</property>
<!-- 数据库密码 -->
<property name=;hibernate.connection.password;>SYSDBA</property>
在达梦数据库中主要分为两种
identity默认使用的是自增列的方式;需要修改对应的表结构;将相应的列改为自增列;即可。采用的是sequence序列自增的方式;Numebr类型不支持自增;IDENTITY适用于INT类型和BIGINT类型的列
CREATE TABLE ;DM_BRAND;
(
;ID; INT IDENTITY(1, 1) NOT NULL,
;BRAND_ID; VARCHAR(50),
;BRAND_NAME; VARCHAR(50),
;BRAND_JC; CHAR(10),
CLUSTER PRIMARY KEY(;ID;));
<?xml version=;1.0; encoding=;utf-8;?>
<!DOCTYPE hibernate-mapping PUBLIC
;-//Hibernate/Hibernate Mapping DTD 3.0//EN;
;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd;>
<hibernate-mapping>
<class name=;com.dameng.entity.DMBRAND; table=;DM_BRAND;>
<id name=;ID; type=;java.lang.Integer;>
<column name=;ID; />
<generator class=;identity; />
</id>
<property name=;BRAND_ID; type=;java.lang.String;>
<column name=;BRAND_ID; length=;50; not-null=;true; />
</property>
<property name=;BRAND_NAME; type=;java.lang.String;>
<column name=;BRAND_NAME; length=;50; not-null=;true; />
</property>
<property name=;BRAND_JC; type=;java.lang.String;>
<column name=;BRAND_JC; length=;50; not-null=;true; />
</property>
</class>
</hibernate-mapping>
CREATE TABLE ;DM_BRAND_SEQ;
(
;ID; INT ,
;BRAND_ID; VARCHAR(50),
;BRAND_NAME; VARCHAR(50),
;BRAND_JC; CHAR(10),
CLUSTER PRIMARY KEY(;ID;));
CREATE SEQUENCE ;SEQ_BRAND;
INCREMENT BY 1
START WITH 1
MAXVALUE 9999
MINVALUE 1
CYCLE
NOCACHE
ORDER
;
<?xml version=;1.0; encoding=;utf-8;?>
<!DOCTYPE hibernate-mapping PUBLIC
;-//Hibernate/Hibernate Mapping DTD 3.0//EN;
;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd;>
<hibernate-mapping>
<class name=;com.dameng.entity.DMBRANDSEQ; table=;DM_BRAND_SEQ;>
<id name=;ID; type=;java.lang.Integer;>
<column name=;ID; />
<generator class=;sequence;> <!--指定此字段使用序列增长策略-->
<param name=;sequence;>SEQ_BRAND</param>
</generator>
</id>
<property name=;BRAND_ID; type=;java.lang.String;>
<column name=;BRAND_ID; length=;50; not-null=;true; />
</property>
<property name=;BRAND_NAME; type=;java.lang.String;>
<column name=;BRAND_NAME; length=;50; not-null=;true; />
</property>
<property name=;BRAND_JC; type=;java.lang.String;>
<column name=;BRAND_JC; length=;50; not-null=;true; />
</property>
</class>
</hibernate-mapping>