Hibernate用Sequence 作主键的问题

保姆级教程:用CellOracle 0.10.13从单细胞数据构建基因调控网络(附完整代码) 本文提供了一份详细的CellOracle 0.10.13使用指南,帮助用户从单细胞数据构建基因调控网络。通过Python接口,即使是生物信息学新手也能快速掌握数据准备、KNN插补、GRN计算及可视化等关键步骤。文章包含完整代码和实用技巧,助力单细胞转录组数据分析。 阅读详情

今天隔壁部门的兄弟尝试用Oracle的Sequence为Hibernate做主键。

做法很简单,我看了之后觉得不是很妥当,应该慎用和少用,

一旦用了Sequence,那么程序就和数据库强耦合了。

从设计的角度,这是很不值得推荐的。

况且,Hibernate的优秀的主键策略那么多,怎么也轮不到Sequence吧?

 

------------------------------------------

引用这兄弟的一篇文章,指出还有tablespace的错误:

 

Hibernate在自增量上的设计缺陷
    前两天在做莱芜供电公司EIP项目集成的时候,一个平时运行很正常,但却突然出现了问题(好比我们用System.out.println(1+1);会输出2,但有一天发现它居然输出3),在做dao.save(obj)操作时,平时能得到PO的ID号,这时候居然出错了,也就是Subclass的级联PO的ID老是出错,我从hbm.xml文件查起,至到oracle的trigger到sequence找了半天,最后发现了Hibernate有一个BUG(可能也不叫BUG,而是使用场合的局限性吧)。
 
   hibernate在跨tablespaces操作时,在维护增量是会出现其在设计上的缺陷,也就是当你的PO是跨tablespace设计的时候,在做dao.save(obj)等类似操作时,由于不同的tablespace上的sequence的增量不同,所以会引起subclass的ID号与数据库记录的ID号是不一致的,也就是session中的对象的ID号是错误的,这是因为hibernate在作save操作后,在session中对象的ID号是直接从hibernate中本次自增量直接获取然后执行setId(),而不是从DB再做一次select语句行到的。(hibernate的主健自增量有不同的设置,如native,assigned等,详写Hibernate手册)
 
一般在项目中很少用到不同的tablespace,所以这个问题比较隐蔽。
 
像说流水账一样,不知道有没有把问题给说清楚-_-!!

 

但从技术的角度,做一个backup,Sequence的实现方式,核心代码是这三行:

        <generator class="sequence">
             <param name="sequence">pk</param>//pk为sequence名称
            </generator>

全部方式如下:

 

 

在Oracle中建立sequence,名称为pk:
create sequence pk
    start with 1
    increment by 1
    maxvalue 2000
    nocycle
    cache 30;
在映射文件中修改:

<class name="com.kay.pojo.Student" table="STUDENT" schema="KAY">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence">
             <param name="sequence">pk</param>//pk为sequence名称
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="50" />
        </property>
    </class>

kaggle-NeurIPS - Open Polymer Prediction 2025-0.069 本文摘要: 本研究基于多任务学习框架,开发了聚合物物理化学性质预测模型,能够根据SMILES字符串同步预测玻璃化转变温度(Tg)、分数游离体积(FFV)等5种关键性质。针对数据缺失率高、样本不均衡等挑战,采用"先补充后扩充"策略整合多源数据,并融合RDKit分子描述符、ChemBERTa语义特征和自编码器特征构建多维度表征。模型采用硬参数共享架构,结合动态加权损失函数和早停机制,在验证集上表现出色,其中密度预测R²达0.92。研究为聚合物性能的高通量预测提供了有效解决方案,对材料智能设计具有重要参考价值。 阅读详情

相关推荐

乐鑫WIFI芯片开发流程梳理-工具链、编译和下载

最近开始基于乐鑫ESP32的WIFI模组的软件开发,首先要做整套流程的梳理,乐鑫官网以及安信可上已经有了较为系统的资料,但是在实现过程中也遇到了一些问题,花了几天去解决,所以为了总结,也为了给其他人提供一些借鉴,把流程分享一下,官网上相对比较完善的,就不在赘述。 1. 开发方案选择 目前网上有两套较为成熟的方案: (1)基于乐鑫官网推荐的开发方式,原网页:https://docs.espress...

一名嵌入式软件工程师的自我成长 3926

Hibernate 通过 SEQUENCE 生成主键

– Start 对于 Oracle 数据库来说,通过我们通过 SEQUENCE 生成主键。 package shangbo.hibernate.demo007; public class App { public static void main(String[] args) throws Exception { DataService dataService = new DataSer...

千里之行始于足下 1472

高德地图轨迹回放,消息框内展示车辆速度且随车辆移动-升级支持调整速度、回放进度

使用高德地图回放车辆GPS轨迹,并添加速度和回放进度条,并支持调整,效果如下: 新增的功能: 在基础版本,有如下升级 速度条:可以拖动以调整车辆回放速度,且从当前位置继续回放 进度条:进度条表示车辆已回放的百分比,且拖动进度条车辆定位到相应的位置并继续回放 ###思路分析 高德和marker回放相关的API //主要靠他回放 moveAlong(path:Array,speed:Number,f:Function,circlable:Boolean) //点移动到另一个位置,移动进度条车辆跟随移动

博客 1万+

Hibernate 序列生成主键重复性问题。

1: 去年遇见过一个很奇怪的问题,就是hibernate在遇见数据量比较多,从十几页往后开始分页失效。   这是hibernate自身问题。因为他生成的查询语句,会导致在遇到大数据量时,就会分页失效。   2:今天遇到hibernate的用序列生成主键策略时,主键重复,因为在之前手动在Oracle数据库中加了几条数据。   本来就不是很喜欢hibernate,两次遇见的问题对他什么好感...

NANJI_WUBING的专栏 721

Agent测试框架Harbor指南

Harbor是一个AI Agent单元测试框架,用于自动化测试AI代理在容器环境中的任务执行能力。它支持18+种AI代理,通过沙箱隔离和自动验证机制评估任务完成情况。任务必须具有可编程验证的输出结果,适合代码、数据、系统等可量化任务,不适合创意写作等主观任务。Harbor采用CLI操作方式,核心架构包含Job管理、Trial执行和验证器三个层级,执行流程包括环境启动、Agent执行和结果验证。任务目录包含指令文件、配置文件、Docker环境定义和测试脚本等必需组件,通过测试脚本自动判断任务完成质量。

loo_Charles_ool的博客 1408

嵌入式开发面试题全解析:指针、内存、数据类型关键问题总结

本文对嵌入式开发典型面试题进行深度解析,涵盖多方面关键知识。题目 19 揭示字符指针修改字符串常量的错误操作;题目 20 展现strcpy引发的缓冲区溢出风险;题目 21 体现未初始化数组与strlen结合的不可预测性;题目 22 通过位域与对齐规则计算结构体大小;题目 23 因unsigned char溢出导致循环异常。这些题目全面覆盖指针操作、内存管理、数据类型特性等核心内容,精准指出开发中易疏忽的陷阱,有助于理解编程规范,规避风险,提升代码质量与稳定性,是深入掌握嵌入式开发要点的实用指南。

嵌入式中手 1364

hibernate中sequence主键生成策略

mycsdn_525的博客 565

Rust 编译工具链配置指南:从 link.exe 缺失到完美解决

本文详细解析了Windows下Rust编译时常见的'link.exe not found'错误,提供了MSVC和MinGW-w64两种工具链的完整配置指南。从Visual Studio组件安装到环境变量设置,再到疑难排查技巧,帮助开发者彻底解决Rust编译工具链配置问题,提升开发效率。

earth的博客 320

(转贴)在Hibernate中使用oracle的sequence产生主键

在很多情况下,我们使用Hibernate在已经建立好数据库的基础上。在oracle中,如果已经建立好的数据库中使用了sequence,则可以按照下面的步骤把它引入到Hibernate中:1、在oracle 首先创建sequencecreate sequence seq_idminvalue 1start with 1...

weixin_30846599的博客 144

使用 ABAP 代码动态创建新的 Function Module

通过内表。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6907

在 IW31 录入班次与当班负责人,并让 IW38 列表同步显示:基于 IWO10018 + IWOC0004 的一套可落地增强方案

摘要 本文详细介绍了在SAP PM模块中实现工厂设备维护订单增强的完整方案,重点解决两个核心需求:在订单创建时新增班次负责人和班次字段,并在订单列表中直接显示这些信息。文章从需求分析、技术设计到具体实现步骤进行了系统阐述。 关键实现步骤包括: 通过CI_AUFK结构扩展AUFK表,确保字段持久化存储 使用IWO10018增强在IW31/IW32/IW33事务中添加输入界面 通过IWOC0004增强在IW38订单列表中显示新增字段 采用优化的数据填充策略提升性能 该方案不仅满足业务需求,还考虑了用户体验和系统

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 176

hibernate在数据库生成hibernate_sequence表问题

环境:@GeneratedValue(strategy = GenerationType.AUTO),数据库用的mysql问题:1.发现数据库保存的时候会生成hibernate_sequence表,用来记录其他表的主键。若删除该表,将报错could not read a hi value - you need to populate the table: hibernate_sequence。2....

霓虹深处 7913

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hibernate5 oracle 数字溢出_Oracle数据库Sequence溢出异常预防测试

在系统实现中,经常需要用到序列号来记录操作执行的顺序或者打印时间戳等。因为序列号等我们只取正值,所以一般都使用无符号数以表示更大的范围。虽然一般的32位或者64位无符号数表示的范围很大,甚至可以确保在系统的生命周期内都不会用完,但是作为一个健壮的系统还是需要考虑无符号数达到最大后,重新归零的溢出问题。事件背景:数据库在sequence没有超过INTEGER类型上限时,系统程序代码中那些错误的和无意...

weixin_39788969的博客 552

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

PAIP.HIBERNATE ORA-02289 sequence does not exist的解决

PAIP.HIBERNATE ORA-02289 sequence does not exist的解决 作者Attilax , 1466519819@qq.com HBM配置文件是    第一种方案: ---------------- 建立 HIBERNATE_SEQUENCE 序列..因为HB会每次先查这个序列的.默认..可通过打印的SQL查看。。会SELECT HI

attilax的专栏 3634

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长

通过Hibernate注解的方式映射oracel数据库的sequence主键生成器时,出现增加数据时sequence无序增长的问题,配置如下 @SequenceGenerator(name = "SEQ_DM_SERVICE_MODEL", sequenceName = SEQ

8313

在Hibernate中使用oracle的sequence产生主键

在Hibernate中使用oracle的sequence产生主键       在很多情况下,我们使用Hibernate在已经建立好数据库的基础上。在oracle中,如果已经建立好的数据库中使用了sequence,则可以按照下面的步骤把它引入到Hibernate中:      1、在oracle 首先创建sequence      create sequence seq_id      minv

多看、多听、多学习 1354

Hibernate: select hibernate_sequence.nextval from dual

Hibernate:     select         hibernate_sequence.nextval     from         dual 出现以上错误时,根据网络总结了以下几种情况: 情况1:   使用oracle数据库时,hibernate配置bean文件时,在*.hbm.xml中配置主键生成策略为sequence,却没有指定sequence,例如:

jutem的专栏 9427

自动生成hibernate_sequence表?

一、场景描述 使用 Spring Data Jpa 自动根据实体类生成表结构; application.properties中需配置: spring.jpa.properties.hibernate.hbm2ddl.auto=update 其实这个 hibernate.hbm2ddl.auto 参数的作用主要用于:自动创建 更新 验证数据库表结构, 有四个值: create: 每次加载 hi...

叶遮沉阳的博客 8959

Hibernate 4升级到Hibernate 5遇到的两个问题

问题一 Hibernate 4构建SessionFactory的方式与Hibernate 5的构建方式不同。 如果在Hibernate 5的环境下继续使用Hibernate 4的sessionFactory创建方式,那么Configuration或者Metadata对象里面没有项目所映射的Entity,造成项目运行时报错,比如: org.hibernate.MappingException...

qq_26817225的博客 3230

【jpa】会什么jpa会自动新建一个hibernate_sequence表

2.使用自定义序列:如果你确实需要使用序列来生成主键值(例如,在Oracle数据库中),你可以使用@SequenceGenerator注解来定义一个自定义的序列,并在@GeneratedValue注解中引用它。1.当JPA实体使用@GeneratedValue注解且没有指定strategy属性,并且Hibernate选择SEQUENCE作为生成策略时(这取决于数据库Dialect和配置),Hibernate会自动创建一个名为hibernate_sequence的序列表。这是MySQL等数据库常用的策略。

王佑辉的博客 910

关于自动生成表hibernate_sequence的问题

在mysql数据库中,使用hibernate自动生成数据表的同时,数据库会自动生成hibernate_sequence表, 如果删除该表,就会报错:could not read a hi value - you need to populate the table: hibernate_sequence 如果将生成策略改为@GeneratedValue(strategy = Generatio...

Coyotess的博客 1911

Hibernate之Table ‘xxx.hibernate_sequence‘ doesn‘t exist异常

异常截图 使用Hibernate jpa操作Mysql出现如下异常: 原因分析 表hiberate_sequence的作用为当主键id增长方式选择以sequence方式时,那么表hibernate_sequence用于记录其他表的主键。 代码中实体注解为@GeneratedValue(strategy = GenerationType.AUTO),那么主键id增长方式交由了数据库自动选择,当数据库为Mysql是选择sqquence增长方式,那么就需要表hibernate_sequence记录其他表的主键。

HelloWord_Lk的博客 3460

hibernate 多对多 中间表主键问题 及id生成方式

hibernate多对多中间表,一般都是两个外键,例如<br />用户表(user),主键:userid. <br />角色表(role),主键:roleid. <br />中间表字段为两个外键:userid,roleid作为联合主键。<br />但是如果想在中间表加一个字段作为单独的主键,即设置一个字段id作为主键。并且数据库采用的是oracle数据库,主键不能自增。那么采用hibernate向中间表插数据的时候,就会出现问题,即主键id字段插入为空,会报错误。<br /><br />由于oracle不支

yanick技术博客 2928

hibernate实现oracle的主键sequence形式自增加

[url]http://www.blogjava.net/wangxinsh55/archive/2008/08/19/222956.html[/url] 在hibernate中实现oracle的自动增长 http://kuangbaoxu.javaeye.com/blog/192434 关键字: hibernate oracle sequence native 根据hiberna...

panshaobinSB的博客 283
上一篇: Dom4J读写XML
下一篇: 数据质量,中国希望
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值