写好了一个基于Hibernate的主键生成器

SPAD单光子雪崩二极管:从基础原理到前沿应用 本文深入解析SPAD单光子雪崩二极管的基础原理、硬件实现关键及核心性能参数,并探讨其在激光雷达、量子通信和生物医学成像等前沿领域的创新应用。SPAD凭借超高灵敏度和精确的时间分辨率,正在推动自动驾驶、量子技术和医学诊断等领域的革命性发展。 阅读详情
package   com.yourcompany;  
   
  import   java.io.Serializable;  
  import   java.util.Properties;  
  import   java.sql.*;  
   
  import   net.sf.hibernate.HibernateException;  
  import   net.sf.hibernate.dialect.Dialect;  
  import   net.sf.hibernate.engine.SessionImplementor;  
  import   net.sf.hibernate.type.Type;  
  import   net.sf.hibernate.util.PropertiesHelper;  
  import   net.sf.hibernate.util.StringHelper;  
  import   net.sf.hibernate.id.PersistentIdentifierGenerator;  
  import   net.sf.hibernate.id.Configurable;  
   
  /**  
    *   <p>产生数据表的主键值</p>  
    *  
    *   <p>  
    *   该类弥补了Hibernate内置生成器hilo的所有表的主键均共享一个数据行的缺陷,  
    *   即在保存主键的表上添加一个字段,该字段保存的是要得到主键值的表名称,每个表的  
    *   主键值均单独保存到一个数据行上。  
    *   </p>  
    *  
    *   <br>保存主键的表名称(默认为COMMON_PRIMARY_KEY),  
    *   <br>该表有两个字段,其中一个字段(默认名称为TARGET_TABLE)是要得到主键值的数据表名,  
    *   <br>另一个字段(默认名称为PRIMARY_KEY_COLUMN)是要得到的主键值。  
    *  
    *   <br>部署描述样例:  
    *   <id   ...>  
            <generator   class="com.yourcompany.PrimaryKeyGenerator">  
                <param   name="target_value">Courses</param>  
                <!--   后边的三个参数可以不写,用默认的,不过前提是在你的数据库中有表COMMON_PRIMARY_KEY   -->  
                <!--   并且有PRIMARY_KEY_COLUMN和TARGET_TABLE这两个字段   -->  
                <!--   别忘了在这个表中加如你要得到主键的表名称(这个例子是Courses),并且初始化主键值,SQL如下:   -->  
                <!--   INSERT   INTO   COMMON_PRIMARY_KEY   VALUES('COURSES',1);   -->  
                <param   name="table">你自己创建的表名称</param>  
                <param   name="column">存放主键的列名称</param>  
                <param   name="target_column">要得到主键值的表名称</param>  
            </generator>  
        </id>  
    *  
    *   <p>Title:   </p>  
    *   <p>Description:   </p>  
    *   <p>Copyright:   Copyright   (c)   2004</p>  
    *   <p>Company:   </p>  
    *   @author   not   attributable  
    *   @version   1.0  
    */  
  public   class   PrimaryKeyGenerator   implements   PersistentIdentifierGenerator,   Configurable{  
   
      /*---------------静态成员-------------*/  
   
      /**  
        *   列名称参数  
        */  
      private   static   final   String   COLUMN   =   "column";  
   
      /**  
        *   表名称参数  
        */  
      private   static   final   String   TABLE   =   "table";  
   
      /**  
        *   目标名称参数  
        */  
      private   static   final   String   TARGET_NAME   =   "target_name";  
   
      /**  
        *   目标值参数  
        */  
      private   static   final   String   TARGET_VALUE   =   "target_value";  
   
      /*-------------结束静态成员--------------*/  
   
   
      /*--------------私有成员---------------*/  
   
      /**  
        *   保存主键的表名称  
        */  
      private   String   _strTableName;  
   
      /**  
        *   保存主键值的列名称  
        */  
      private   String   _strColumnName;  
   
      /**  
        *   保存表名称的列名称  
        */  
      private   String   _strTargetColumn;  
   
      /**  
        *   查询Sql  
        */  
      private   String   _strQuerySql;  
   
      /**  
        *   更新Sql  
        */  
      private   String   _strUpdateSql;  
   
      /*-------------结束私有成员-------------*/  
   
   
      /**  
        *   得到各个参数的值  
        *   @param   type  
        *   @param   params  
        *   @param   dialect  
        */  
      public   void   configure   (Type   type,   Properties   params,   Dialect   dialect){  
   
          //得到存放主键值的表名称(默认为COMMON_PRIMARY_KEY)  
          _strTableName   =   PropertiesHelper.getString(TABLE,params,"COMMON_PRIMARY_KEY");  
   
          //得到存放主键值的列名称(默认为PRIMARY_KEY_COLUMN)  
          _strColumnName   =   PropertiesHelper.getString(COLUMN,params,"PRIMARY_KEY_COLUMN");  
   
          //得到要取得主键值的目标数据表的列名称(默认为TARGET_TABLE)  
          _strTargetColumn   =   PropertiesHelper.getString(TARGET_NAME,params,"TARGET_TABLE");  
   
          //得到要取得主键值的目标数据表的值  
          String   strTargetValue   =   params.getProperty(TARGET_VALUE);  
   
          //得到查询与更新的SQL语句  
          _strQuerySql   =   "SELECT   "   +   _strColumnName   +   "   FROM   "   +   _strTableName   +   "   WHERE   "   +  
                  _strTargetColumn   +   "   =   '"   +   strTargetValue   +   "'";  
          _strUpdateSql   =   "UPDATE   "   +   _strTableName   +   "   SET   "   +   _strColumnName   +   "   =   ?   WHERE   "   +  
                  _strTargetColumn   +   "   =   '"   +   strTargetValue   +   "'";  
      }  
   
      /**  
        *   产生主键值  
        *   @param   sessionImplementor  
        *   @param   obj  
        *   @return   主键值  
        *   @throws   SQLException  
        *   @throws   HibernateException  
        */  
      public   synchronized   Serializable   generate(SessionImplementor   sessionImplementor,   Object   obj)  
                  throws   SQLException,   HibernateException{  
   
          Connection   conn   =   null;  
          Statement   stmt   =   null;  
          PreparedStatement   preStmt   =   null;  
   
          try{  
              //得到数据库连接  
              conn   =   sessionImplementor.getFactory().openConnection();  
              stmt   =   conn.createStatement();  
   
              //得到主键值  
              ResultSet   rs   =   stmt.executeQuery(_strQuerySql);  
              int   iPrimaryKey;  
              if(rs.next()){  
                  iPrimaryKey   =   rs.getInt(1);  
                  rs.close();  
              }  
              else  
                  throw   new   HibernateException("没有检索到符合条件的主键值");  
   
              //更新主键列  
              preStmt   =   conn.prepareStatement(_strUpdateSql);  
              preStmt.setInt(1,iPrimaryKey   +   1);  
              preStmt.execute();  
   
              return   String.valueOf(iPrimaryKey);  
          }  
          finally{  
              if(stmt   !=   null)  
                  stmt.close();  
              if(preStmt   !=   null)  
                  preStmt.close();  
              if(conn   !=   null)  
                  conn.close();  
          }  
      }  
   
      public   String[]   sqlCreateStrings(Dialect   dialect)   throws   HibernateException   {  
          return   new   String[]   {  
                  "CREATE   TABLE   "   +   _strTableName   +   "   (   "   +   _strColumnName   +   "   "   +   dialect.getTypeName(Types.INTEGER)   +  
                  ","   +   _strTargetColumn   +   "   "   +   dialect.getTypeName(Types.VARCHAR)   +   "   )",  
          };  
      }  
   
      public   String   sqlDropString(Dialect   dialect)   {  
          return   "DROP   TABLE   "   +   _strTableName   +   dialect.getCascadeConstraintsString();  
      }  
   
      public   Object   generatorKey()   {  
          return   _strTableName;  
      }  
  }
MFC实现图书管理系统(附完整源码) 阅读详情

相关推荐

Android开发者必看:5分钟搞定MQTT客户端连接EMQX服务器(附完整代码)

本文为Android开发者提供了一份快速实现MQTT客户端连接EMQX服务器的实战指南。通过引入Eclipse Paho SDK,详细讲解了从项目配置、权限申请到核心连接、主题订阅与消息发布的完整流程,并附有即拿即用的Kotlin代码,帮助开发者在物联网应用中高效集成轻量级实时通信功能。

weixin_29228781的博客 272

Spring boot JPA 用自定义主键策略 生成自定义主键ID

自定义ID生成 package com.thsware.framework.domain; import org.hibernate.HibernateException; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.id.UUIDGenerator; import java.io.Serializable; import java.lang.reflect.Metho.

qq_33486082的博客 1073

计量经济学tempdisagg的python库:年度时序变月度

计量经济学tempdisagg的python库:年度时序变月度

素质云笔记 1530

hibernate的主键生成器

1. hibernate的主键生成器: generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 。 1.1创建两个实体类 Student package com.wr.two.entity; public class Student { private int sid; private String sname; public int getSid() { r...

weixin_45111741的博客 613

银河麒麟arm64 V10 SP1桌面系统高效部署onnxruntime推理环境实战

本文详细介绍了在银河麒麟arm64 V10 SP1桌面系统上高效部署onnxruntime推理环境的完整实战流程。从系统环境准备、关键依赖安装,到onnxruntime的安装验证,并以YOLOv5模型部署为例进行性能对比分析,提供了在国产化飞腾D2000平台上进行AI边缘推理的实用指南和避坑技巧。

ss78901的博客 636

Qt c++ llama.cpp 运行 LLaMA-3-8B 中文对话机器人(多模态输入)

助手:

寒寒豆豆软件公司的博客 222

Hibernate主键生成器

一. hibernate的主键生成器: generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 。 1.1 程序员自己控制:assigned 1.2 数据库控制: identity(标识列/自动增长) sequence 1.3 hibernate控制:increment uuid/uuid.hex 1.4 其它:native 公司名_模块名_时间戳 2. 主键生成器要求 ...

CJQYQX的博客 335

YOLOv11缝合添加注意力机制:添加YOLO-Face的SEAM到并行通道空间注意力机制【附代码】

在目标检测的实际应用中,物体遮挡是一个严重影响检测精度的难点。本文将基于YOLOv11架构,探索融合YOLO-Face中提出的SEAM注意力机制以提升对遮挡物体的感知能力,并在此基础上提出一种轻量化双路径并行注意力机制C2PSA,进一步提升检测性能。

一键难忘的博客 1530

hibernate主键生成器

hibernate的主键生成器: generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 。 uitl包里:工具类 功能:1.简化代码 2.测试相关配置是否成功 package com.zking.two.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import ...

kiki208418895的博客 316

【Halcon-1D测量】measure_pairs 函数功能(用于提取垂直于矩形/环形弧主轴的直边对)

HALCON算子measure_pairs是1D测量模块的基础工具,专用于提取垂直于矩形/环形弧主轴的直边对。该算子通过振幅阈值和灰度过渡规则(如positive/negative)进行边对分组,支持_strongest后缀选择最强边缘避免误配对。输出包含边缘坐标、振幅及内外间距(IntraDistance/InterDistance)。关键限制包括仅适用于直边、Sigma需≤0.5×测量长度,且忽略图像域。相比模糊版本算子,它更适用于边缘清晰的简单场景(如电子元件间距测量)。典型应用需配合gen_meas

weixin_45590420的博客 305

【项目典型案例】-2-任意帧/特定帧CAN唤醒对ECU首帧/启动时间的影响

任意帧/特定帧CAN唤醒对ECU启动时间的影响

「汽车电子助手」的博客 1944

Hibernate中对于主键自增策略的Annotation

关键字: hibenate @generatedvalue @genericgenerator 这里讨论代理主键,业务主键(比如说复合键等)这里不讨论。  一、JPA通用策略生成器  通过annotation来映射hibernate 实体的,基于 annotation的hibernate 主键标识为@Id,  其生成规则由@GeneratedValue设定的.这里的@id和@Generat

oathevil的专栏 1万+

fastlio2原理详解

其核心是利用IMU的高频数据(通常100-500Hz)进行状态预测(前向传播),同时利用激光雷达扫描(通常10-100Hz)作为观测来校正状态。转换了卡尔曼增益的计算公式,将对大维度观测矩阵的求逆(点云数量级)转换为对小维度状态矩阵的求逆,从而极大提升了计算效率。:利用预测出的连续IMU状态,将一帧内每个激光点根据其时间戳反向插值,统一校正到扫描结束时刻,输出无畸变的点云。收敛后,用最终的状态将本帧点云。,根据其精确的时间戳,利用前后两个IMU位姿进行插值,计算出该点采集时刻的精确位姿,再将其全部。

Studying…… 103

hibernate的主键生成器介绍

hibernate的主键生成器介绍 Hibernate推荐数据表采用逻辑主键,而不采用有物理含义的实体主键。逻辑主键没有实际意义,仅仅用来标识一行记录,通常由Hibernate负责生成。负责生成主键的工具称为主键生成器,应尽量为每个持久化类都设置主键生成器。 在 xxx.hbm.xml 中 generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 。 下面是 genera...

wx1762813417的博客 406

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Hibernate的主键生成策略,自定义主键生成器?

资料: 一、主键类型: 1、assigned: 数据库ID设为自动增长列时,在存储对象前,主键可手动赋值,也可不手动赋值; 不赋值执行数据库自动增长,赋值执行赋予的值(数据类型为int)。 2、identity: 数据库ID必须设置为自动增长列,不能手动赋值(数据类型必须为int类型)。 3、increment: 数据库ID可不设置为自动增长列,不能手动赋值(数据类型必须为int...

qq_42246139的博客 2353

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Hibernate主键生成器说明

自然主键:具有业务意义的字段作为主键,例如学生表中用学号作为主键 代理主键:定义的、专门用来标记记录的ID,它除了用来标识记录外,不具有                       任何的业务意义     ID生成器名称 说明 assigned 应用程序自身对id赋值。当设置<generator class="assign

90worker 1641

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

uuid.hex主键生成器

对于数据库主键生成策略,大家都了解一些,尤其是关于hibernate的主键生成更是方便很多。 而大多数人只知道使用,hibernate给定的生成策略,我今天想说的是主键生成器,就是自己写一个类来生成主键。 在开始之前,先对hibernate给定的生成策略做个了解。 ********************************************************

9223

hibernate之主键生成策略

update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列(并且表中原来的数据不会丢失)(注:若表里有多余的列,则不会删除)。若对应类型不一致,则不会修改表的字段的类型,操作(如插入记录)失败(Consle无错误提示) 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。 create-drop:启动hibernate时,自动创建表

qq_43588771的博客 218

06. Hibernate 中主键映射的助攻

本节课和大家一起聊聊Hibernate中的主键策略。什么是主键策略及主键生成器的种类;如何映射复合主键。关系数据库中,主键可指定一个字段实现,也可指定多个字段实现,这样的主键叫复合主键。从数据库表设计原则分析,尽可能少用复合主键,但并不排除需要使用的场景。对使用Hibernate在应用程序中,如何映射表中的复合主键?将嵌入类注解为,并将实体类的属性注解为@Id;将实体类的属性注解为将实体类注解为@IdClass,并将该实体类所有属于主键的属性都注解为@Id实体类:使用@entity注解的类;

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 1293
上一篇: XSL
下一篇: 页面传参
txlaijava
博客等级 码龄19年 10粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值