Hibernate ID生成策略/联合主键解决方案

大模型交互中‘说教感’的工程化破解:语用人格校准实战指南 大语言模型的交互体验瓶颈,正从能力不足转向语用失当——当GPT-4 Turbo等高精度模型频繁触发‘居高临下’反馈,本质是预训练目标与人类对话逻辑的根本错位。本文基于真实产品交付数据,将模糊的‘人味’解构为可测量、可调试的5个工程维度:主语流动性、经验颗粒度、认知谦逊度、节奏呼吸感与容错安全垫;结合提示工程、后处理规则与意图感知策略,在不修改模型权重前提下系统性软化输出语调。内容覆盖教育、医疗、法律、儿童编程等6大垂直场景的校准模板,并提供AB测试验证的量化指标与生产级Python实现,直击AI产品落地中最 阅读详情

对于不同数据库的主键id,生成是不一样的.在Hibernate中也有相对应的策略.

 

可选的<generator>子元素是一个Java类的名字, 用来为该持久化类的实例生成唯一的标识。如果这个生成器实例需要某些配置值或者初始化参数, 用<param>元素来传递

所有的生成器都实现org.hibernate.id.IdentifierGenerator接口。

 

下面是一些内置生成器的快捷名字:

increment

用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。

identity

对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。

sequence

在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。

hilo

使用一个高/低位算法高效的生成long, short 或者 int类型的标识符。给定一个表和字段(默认分别是 hibernate_unique_key 和next_hi)作为高位值的来源。 高/低位算法生成的标识符只在一个特定的数据库中是唯一的。

seqhilo

使用一个高/低位算法来高效的生成long, short 或者 int类型的标识符,给定一个数据库序列(sequence)的名字。

uuid

用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。

guid

在MS SQL Server 和 MySQL 中使用数据库生成的GUID字符串。

native

根据底层数据库的能力选择identity, sequence 或者hilo中的一个。

assigned

让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。

select

通过数据库触发器选择一些唯一主键的行并返回主键值来分配一个主键。

foreign

使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。

sequence-identity

一种特别的序列生成策略,使用数据库序列来生成实际值,但将它和JDBC3的getGeneratedKeys结合在一起,使得在插入语句执行的时候就返回生成的值。目前为止只有面向JDK 1.4的Oracle 10g驱动支持这一策略。注意,因为Oracle驱动程序的一个bug,这些插入语句的注释被关闭了。(原文:Note comments on these insert statements are disabled due to a bug in the Oracle drivers.)

 

XML配置方法:

<hibernate-mapping>

    <class name="com.hibernate.test.entitys.Student" table="student">

       <id name="id">

           <!--<generator class="assigned"/>-->

           <generator class="native"/><!—从指定使用哪种id生成策略-->

       </id>

    <property name="name"/>

    <property name="sex"/>

    <property name="password"/>

    </class>

   

</hibernate-mapping>

 

 

 

 

Annotation注解方法:

1.

//映射到数据库中的主键

    @Id

//此注解默认值为auto,也就是为自动.相当于在配置文件中使用”native”

    @GeneratedValue

    public int getId() {

       return id;

    }

2.

如果想指定具体的id生成策略(IDENTITY/SEQUENCE/AUTO),比方说为oracle数据库指定id生成策略,那么就只能用sequence.

//只需要把注解写成这样就行(也就是指定策略为自己需要的类型,GenerationType是各种策略的枚举值)

@GeneratedValue(strategy=GenerationType.SEQUENCE),

 

上述方法虽然可行,但是会有点别扭,哪里别扭呢?

也就是生成表的时候,所有的表都使用同一个sequence了.虽然也不碍事,但毕竟不符合习惯,我们的习惯应该是每张表都有它自己的sequence.

用下面的方法就可以解决:

 

 

 

//映射成数据库中的表

@Entity

//如果类名和数据库中的表名不一致,通过此注解声明

@Table(name="_Teacher")

//为每张表指定自己的sequence,name属性是生成器的名字,sequenceName是数据库中sequence的名字

@SequenceGenerator(name="TeacherSEQ",sequenceName="TeacherSEQ_DB")

public class Teacher {

    private int id;

    private String name;

    private String title;

    private String myRealName;

    private ZhiCheng zhiCheng;  //自定义枚举类型

   

    //如果不需要将此属性映射到数据库中的字段,用此注解

    @Transient

    public String getMyRealName() {

       return myRealName;

    }

    public void setMyRealName(String myRealName) {

       this.myRealName = myRealName;

    }

 

    //映射到数据库中的主键

    @Id

    //注意这里的第二个参数,值是在类上指定的生成器的名字!

   @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="TeacherSEQ")

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

 

    //如果属性名和数据库中的字段不一样,通过此注解声明

    @Column(name="_name")

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

 

    public String getTitle() {

       return title;

    }

    public void setTitle(String title) {

       this.title = title;

    }

   

    //映射自定义枚举(映射到数据库中为Varchar类型)

    @Enumerated(EnumType.STRING)

    public ZhiCheng getZhiCheng() {

       return zhiCheng;

    }

    public void setZhiCheng(ZhiCheng zhiCheng) {

       this.zhiCheng = zhiCheng;

    }

}

 

 

 

 

 

联合主键的映射:

首先要把联合主键的几个属性提取为一个主键类;

 

1.XML配置

         composite-id

         <!—-指定提取出来的联合主键的类-->

<composite-id name="pk" class="com.hibernate.test.entitys.TeacherPK">

       <key-property name="id"/><!—-指定联合主键的各个属性-->

       <key-property name="name"/>

    </composite-id>

需要重写联合主键类的hashcode()和equals()

hashcode()只需要返回其中一个String类型的hashcode就行

equals()需要判断联合主键类的各个属性都相同,才能返回true,反之.

 

 

2.Annotation联合主键映射的三种方法:

 

Method 1:给提取出来的主键类加上@Embeddable注解,实体类getXXX主键的方法上加@Id

 

Method 2:提取出来的主键类不加注解,实体类getXXX主键的方法上加@EmbeddedId.    (以验证通过)

 

Method 3:提取出来的主键类不加注解,实体类的联合主键分别都加@Id,实体类上加@IdClass(这里指定主键类)

 

 

 

eg:

 

//映射成数据库中的表

@Entity

@IdClass(TeacherPK.class)---第三种方法

public class Teacher implements Serializable {

    /*private int id;

    private String name;  把这个类中的id和name属性提取为联合主键*/

    private String title;

    private TeacherPK pk;

   

    @Id---第一种方法

    @EmbeddedId---第二种方法

    getPk(){…}

    setPk(){…}

   

 

第三种方法去掉主键类对象,

@Id

getId(){…}

@Id

getName(){…}

    public String getTitle() {

       return title;

    }                               

    public void setTitle(String title) {

       this.title = title;

    }

}

 

/**

 * 提取出来的主键类

 * @author PF_CQ

 *

 */

@Embeddable----第一种方法

第二种方法,去掉注解

第三种方法,去掉注解

public class TeacherPK implements Serializable {

  private static final long serialVersionUID = -6247050545165388561L;

  private int id;

  private String name;

 

  getXXX{}…setXXX{}

  getXXX{}…setXXX{}

 

  重写hashcode 和 equals 方法

 

}

使用@IdClass创建联合主键,并实现外部关联 立即下载

相关推荐

【LDLTS解析】从重叠峰到精准参数:拉普拉斯深能级瞬态光谱如何重塑半导体缺陷分析

本文深入解析了拉普拉斯深能级瞬态光谱(LDLTS)技术如何革新半导体缺陷分析。针对传统DLTS难以分辨重叠峰的痛点,LDLTS通过拉普拉斯逆变换对高精度电容瞬态曲线进行数学解卷积,成功分离发射率相近的缺陷信号,实现从模糊宽峰到精准独立峰的转变。该技术不仅大幅提升了缺陷激活能和捕获截面等关键参数的提取精度,更推动分析范式从经验拟合转向第一性原理,为先进半导体工艺开发与良率提升提供了强大的精准诊断工具。

weixin_29224309的博客 272

hibernate id生成策略 mysql_hibernate(四)ID生成策略

一、ID生成策略配置1、ID生成方式在xml中配置方式:/p>"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">2、ID用注解配置:在ID注解下添加注解@generatedValue,只有四种方式,默认的策略是auto配置方式:@gen...

weixin_33691489的博客 710

【CubeMX】STM32G474 HRTIM 死区时间与互补PWM实战解析

本文深入解析STM32G474的HRTIM高分辨率定时器在互补PWM生成与死区时间配置中的应用。通过CubeMX工具详细演示时钟配置、单路PWM基础、互补输出与死区时间设置,并结合逆变器等电力电子实战案例,帮助开发者避免直通风险,优化系统性能。

efc12345678的博客 745

hibernate主要的ID生成策略

Hibernate为优秀的持久层框架代表,在传统的JDBC+JavaBean操作中,实体对象都由程序员自己去封装,然后返回。而在Hibernate中,采用对象关系映射(Object/Relation Mapping, ORM),大大简化了对数据库的操作。 本文主要针对Hibernate反向工程生成的三个半文件之hbm.xml文件的主键class属性进行介绍,Hibernate映射文件(*.h

HD243608836的博客 733

MATLAB地理数据处理 25:植被物候提取及分析模型优化(Savitzky-Golay)

之前我写过一篇使用Savitzky-Golay处理遥感数据,获取地面物候信息的MATLAB代码,但是发现存在一些问题:对物候开始期和物候结束期的阈值设定都为相同值,但是有些研究中,需要根据不同的环境条件,设置不同的物候阈值,所以对其进行相应的修改。

amyniez的博客,欢迎交流讨论 2232

【教程4>第2章>第19节】 GMSK解调系统的FPGA开发与matlab对比验证

MSK(Minimum Shift Keying,最小频移键控)和GMSK(Gaussian Minimum Shift Keying,高斯最小频移键控)都是数字调制技术,主要用于无线通信系统中将数字信号转换为模拟信号进行传输。它们都是连续相位移键控(Continuous Phase Shift Keying, CPK)的一种形式,意味着相邻码元之间没有相位跳变的突变,而是连续过渡,这有助于减少信号带宽和降低邻道干扰。GMSK的解调过程与MSK类似,我们这里还是采用和MSK解调一样的1bit解调方法。

FPGA/MATLAB学习教程/源码/项目合作开发 1219

hibernate自定义主键生成策略(利用雪花算法生成主键id)

使用Hibernate自定义主键生成策略(雪花算法生成主键id)

m0_61427728的博客 1737

YOLOv11改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下:详细内容参考:YOLOv11原始模型结构介绍 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检

Limiiiing的博客 8794

基于按annotation的hibernate主键生成策略

这里讨论代理主键,业务主键(比如说复合键等)这里不讨论。 一、JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法, JPA提供四种标准用法,由@GeneratedValue的源代码可以明...

白首穷经通秘义 794

ORB-SLAM3编程实践指南

它基于特征点的立体视觉和视觉惯性里程计技术,能够在没有先验知识的情况下,从单目、双目或RGB-D摄像头的输入中实时构建稠密三维地图,并实现相机的定位。通过正确配置环境、准备数据集和运行ORB-SLAM3,您可以实现高效的视觉SLAM系统,并获取相机在三维空间中的位姿。其中,[path_to_vocabulary]是ORB-SLAM3的词汇文件路径,[path_to_settings]是相机参数配置文件路径,[path_to_sequence]是输入图像的路径。运行ORB-SLAM3。

ByteNinja的博客 551

通过Simulink搭建一个智能微电网能量管理系统(Energy Management System, EMS)

通过上述代码实现,您可以逐步创建一个智能微电网能量管理系统。多源能量集成:整合光伏、风力发电、柴油发电机、电池储能等多种能源资源。负荷预测与调度:基于历史数据和天气预报,预测未来负荷和可再生能源输出,进行优化调度。储能系统优化:设计合理的充放电策略,确保储能系统的高效利用和寿命延长。经济性分析:评估不同运行模式下的经济性,考虑电价、维护成本等因素。环境影响评估:分析微电网对环境的影响,如减少碳排放、提高可再生能源利用率等。硬件在环仿真(HILS)

amy_mhd的博客 314

Hibernate的ID生成策略/联合主键解决方案

对于不同数据库的主键id,生成是不一样的.在Hibernate中也有相对应的策略.   可选的子元素是一个Java类的名字, 用来为该持久化类的实例生成唯一的标识。如果这个生成器实例需要某些配置值或者初始化参数, 用元素来传递 所有的生成器都实现org.hibernate.id.IdentifierGenerator接口。   下面是一些内置生成器的快捷名字: increment 用

htofly的专栏 611

微搭低代码实现用户登录及注册功能

在小程序开发中,我们可以拿到微信用户的openid,openid可以作为用户的唯一标识,在查询数据的时候可以进行数据过滤实现查询自己提交的数据。那微搭中是否也有openid这个概念,可以获取用户自己提交的数据呢? 答案是肯定的,那要怎么去做呢?思路是先创建一个数据源方法,在数据源中返回openid,然后低代码中可以调用数据源的方法并且赋值给全局变量,这样在后续的业务中从全局变量就可以获取openid了,方便做数据权限的控制。 为了实现这个目的,我们从创建数据源开始。 创建数据源 我们先创建一个用户管理的数据

低代码布道师的博客 2994

Hibernate的ID生成策略/联合主键解决方案[转]

转至http://blog.163.com/fengzhisha0914@126/blog/static/1503147852010749441745/   对于不同数据库的主键id,生成是不一样的.在Hibernate中也有相对应的策略.   可选的&lt;generator&gt;子元素是一个Java类的名字, 用来为该持久化类的实例生成唯一的标识。如果这个生成器实例需要某些配置值或者...

iteye_17420的博客 226

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

hibernate id 联合主键生成策略

如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略。  具体如下:  可以使用一个组件作为一个实体类的标识符。你的组件类必须满足以下要求:  它必须实现 java.io.Serializable 接口  它必须重新实现 equals() 和 hashCode() 方法,始终和组合关键字在数据库中的概念

caomiao2006的专栏 2156

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Hibernate系列之Id生成策略

一、概述   hibernate中使用两种方式实现主键生成策略,分别是XML生成id和注解方式(@GeneratedValue),下面逐一进行总结。 二、XML配置方法   这种方式是在XX.hbm.xml文件中对generator进行配置,eg: xml version="1.0"?> DOCTYPE hibernate-mapping PUBLIC

572

Devexpress16.2.6破解工具

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

java自增id生成策略_ID生成策略(一)

ID生成策略:主键手工设定很不方便,在我们实际工作中在MySQL里面用自增字段auto increment,在oracel中一般用sequence。所以把表建成auto increment,对于类里面对象的对应的值就不能指定了,得靠程序或数据库自动生成,hibernate或JPA就实现了这样的功能,我们可以通过设置告诉这个字段怎么生成,这样写程序的时候就不用设定了。这个就叫ID的生成策略。动手实验...

weixin_42425947的博客 3572

Hibernate中联合主键生成策略

Hibernate中联合主键生成策略

yaguanzhou2014的专栏 962

Hibernate学习——(三)ID生成策略介绍

还记得@Id注解吗?Id即主键,在之前的实验中都是手工指定,然而这样在实际中很容易出错儿,因而在实际中往往采用数据库 自动帮我们生成Id。Hibernate或者说JPA已经实现了通过设置方式使Id自动生成。 先介绍通过XML方式设置的方式。在标签内有一个generator标签,这个标签内部有一个class属性: 常用的class: 1、identity:每次自增1,支持DB2、Mys

WangQYoho的博客 772

Hibernate系列之ID生成策略

一、概述   hibernate中使用两种方式实现主键生成策略,分别是XML生成id和注解方式(@GeneratedValue),下面逐一进行总结。 二、XML配置方法   这种方式是在XX.hbm.xml文件中对generator进行配置,eg: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBL...

dengduoya4019的博客 296

如何使用Hibernate处理联合主键

1.Hibernate处理联合主键 如果在表中有两个列联合起来当主键,处理步骤如下 编写一个类(实现序列化接口),封装主键,并编写程序 PO内编写各个属性,包括主键类型 在映射文件内写明: <composite-id name="属性名" class="主键类名"> <key-property name="属性名" column="列名"/> <key-pro...

欧世乐 779
上一篇: MyEclipse 设置
下一篇: Hibernate ID生成策略/联合主键解决方案
MyJavaBlog
博客等级 码龄16年 11粉丝 126原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值