Hibernate适配DM数据库主键自增配置

这篇具有很好参考价值的文章主要介绍了Hibernate适配DM数据库主键自增配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

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中的配置也相对简单,如下。
Hibernate适配DM数据库主键自增配置

二、项目加载驱动包

在项目开发/移植阶段到达梦数据库 需要替换为达梦的jdbc驱动包以及dialect包。
驱动包在达梦的安装目录\dmdbms\drivers\jdbc下。版本的对应关系查看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序列自增的方式;

1. identity方式

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"));

hbm.xml

<?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>

2. sequence方式

表结构

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
            ;

hbm.xml

<?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>

3.表注解自增

@GeneratedValue,JPA通用策略生成器 。
        JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO. 
          TABLE:使用一个特定的数据库表格来保存主键。 
          SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 

@Id  
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq")  
@SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")  

4. generator class=“native”

<id name="id" column="id">
<generator class="native" />
</id>

但是这个配置是不能在DM数据库中识别的,会直接报错,违反非空约束。所以需要单独指定成使用序列作为主键的方式,同时要在数据库中先手动创建对应的序列,再进行序列名配置后引用。

CREATE SEQUENCE HIBERNATE_SEQUENCE INCREMENT BY 1 START WITH 1 CACHE 20;

    <id name="ID_" type="long">
      <column name="ID_"/>
      <generator class="native">
      	<param name="sequence">HIBERNATE_SEQUENCE</param>
      </generator>
    </id>

在达梦数据库中,native 默认使用的是自增列的方式,需要修改对应的表结构,将相应的列改为自增列即可。文章来源地址https://www.toymoban.com/news/detail-423216.html

到了这里,关于Hibernate适配DM数据库主键自增配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过DBeaver 给Postgre SQL表 设置主键自增

    1.创建表 CREATE TABLE public.company ( id int4 NOT NULL , name text NOT NULL, age int4 NOT NULL, address bpchar(50) NULL, salary float4 NULL, join_date date NULL, CONSTRAINT company_pkey PRIMARY KEY (id) ); 2.插入数据(不传入id) INSERT INTO public.company (name, age, address, salary, join_date) VALUES(\\\'Kobe\\\', 20, \\\'Lake\\\', 10000, \\\'1996-07-13\\\');  

    2024年02月12日
    浏览(59)
  • mysql高并发下主键自增打来的问题

    在一般情况下,在新增领域对象后,都需要获取对应的主键值。使用应用层来维护主键,在一定程度上有利于程序性能的优化和应用移植性的提高。在采用数据库自增主键的方案里,如果JDBC驱动不能绑定新增记录对应的主键,就需要手工执行查询语句以获取对应的主键值,对

    2024年02月13日
    浏览(29)
  • mybatis实战:四、insert 用法(普通插入、返回主键自增的值)

    1.UserMapper.xml 1.指定特殊数据类型 2.<insert >元素,这个标签包含如下属性  2. UserMapperTest  1.只插入一条数据 2.回滚(不写入数据库) 3.插入后判断是否为空(为空/不为空,抛异常) 3.UserMapper 方法一: 使用 JDBC 方式返回主键自增的值  方法二: 使用 selectKey 返回主键的值

    2024年02月07日
    浏览(37)
  • 【DM】达梦数据库与MySQL适配

    新手直接看达梦入门技术文档即可 1、介绍 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM,它具有如下特点: 通用性、高性能、高可用、跨平台、高可扩展 2、与MySQL的区别 (1)创建表的时候,不支持在列的后面直接加 comme

    2024年02月14日
    浏览(39)
  • 达梦(DM)数据库存储加密

    这里主要讲述DM数据库存储加密中比较常用也比较容易理解的非透明加密相关内容。 引用官方的话说:DM 对非透明加密的支持是通过对用户提供加解密接口实现的。用户在使用非透明加密时,需要提供密钥并调用加解密接口。采用非透明加密可以保证个人私密数据不被包括

    2024年04月29日
    浏览(29)
  • 达蒙DM数据库使用经验

    DM数据库管理工具为tool目录下的 注:dm数据库无法在建表的同时为字段名添加注释 将表中的某列转换成自增列且以前存在的数据不变,从当前最大值开始实现自增,以下是解决步骤: 1,创建自增序列(从1开始自增1): 2,获取序列下一个值 3,获取序列当前值 4,查看序列状态

    2024年02月13日
    浏览(45)
  • 数据库应用:kylin 部署 达梦数据库DM8

    目录   一、实验 1.环境 2.部署前规划 3.部署达梦数据库DM8 4.创建数据库及数据库事例管理 5.达梦数据库的基本操作 二、问题 1.xhost命令报错 2.执行安装程序DMInstall.bin 报错 3.解压安装程序报错 4.安装程序找不到文件 5.图像化界面打不开 6.安装内存太小 7.打开图形化界面报错

    2024年02月19日
    浏览(40)
  • 数据库----------约束、主键约束

    目录 1.简介 1.概念 2.作用 3.分类 2.主键约束  1.概念 2.操作 1.添加单列主键 2.添加多列联合主键 3. 通过修改表结构添加主键 4.删除主键 3.自增长约束(auto_increment) 1.概念 2.特点 3.指定自增字段初始值 4.delete和truncate在删除后自增列的变化 4.非空约束(not null) 1.概念 2.语法 3.添加

    2023年04月09日
    浏览(28)
  • SQLServer数据库给某个字段添加自增

    1、启动Microsoft SQL Server Management Studio 18工具 Navicat好像不能设置字段的自增…,所以用了Management Studio 18 2、工具 选项 设计器 3、修改这个字段为自增,并保存! 4、测试,发现此字段自增成功!

    2024年02月15日
    浏览(52)
  • PostgreSQL数据库实现表字段的自增

    在使用MySQL的时候,创建表结构时可以通过 AUTO_INCREMENT 来指定主键是否自增。在PostgreSQL数据库中,使用序列来实现字段的自增。 PostgreSQL序列是一种特殊的用于生产整数序列数据库对象。序列通常用于主键列,与mysql的AUTO_INCREMENT 概念类似。 PostgreSQL 提供三种序列伪类

    2024年02月04日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包