news 2026/7/28 17:12:47

hibernate的主键生成器介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hibernate的主键生成器介绍

1. hibernate的主键生成器:

generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 。

1.1 程序员自己控制:assigned

1.2 数据库控制: identity(标识列/自动增长) sequence

1.3 hibernate控制:increment uuid/uuid.hex

1.4 其它:native

公司名_模块名_时间戳

student id int
worker id varchar

2. 主键生成器要求

2.1 assigned

数据类型不限、保存前必须赋值

# 2.2 identity(重点掌握)

数字,无需赋值

2.3 sequence(重点掌握)

数字,无需赋值, 默认使hibernate_sequence这个序列, 也可以通过sequence/sequence_name参数赋值

2.4 increment

数字,无需赋值

2.5 uuid/uuid.hex (是由容器自动生成的一个32位的字符串,.hex代表的是十六进制)

32位的字符串,无需赋值,

2.6 native(重点掌握)

等于identity+sequence

直接上代码

提供一个工具类entity:
student

packagecom.pyc.first.entity;publicclassStudent{privateInteger sid;privateString sname;publicIntegergetSid(){returnsid;}publicvoidsetSid(Integer sid){this.sid=sid;}publicStringgetSname(){returnsname;}publicvoidsetSname(String sname){this.sname=sname;}@OverridepublicStringtoString(){return"Student [sid="+sid+", sname="+sname+"]";}publicStudent(){super();}}Sutdent.hbm.xml ```java<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="com.pyc.first.entity.Student"table="t_hibernate_student"><id name="sid"type="java.lang.Integer"column="sid"><!--<generatorclass="assigned"/>--><!--程序员自己控制--><!--<generatorclass="identity"/>--><!--数据库控制(标识列/自动增长)--><!--<generatorclass="increment"/>--><!--hibernate控制--></id><property name="sname"type="java.lang.String"column="sname"></property></class></hibernate-mapping>

worker.java

packagecom.pyc.first.entity;publicclassWorker{privateString wid;privateString wname;publicStringgetWid(){returnwid;}publicvoidsetWid(String wid){this.wid=wid;}publicStringgetWname(){returnwname;}publicvoidsetWname(String wname){this.wname=wname;}@OverridepublicStringtoString(){return"Worker [wid="+wid+", wname="+wname+"]";}publicWorker(String wid,String wname){super();this.wid=wid;this.wname=wname;}publicWorker(){super();}}

Worker.hbm.xml

<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="com.pyc.first.entity.Worker"table="t_hibernate_worker"><id name="wid"type="java.lang.String"column="wid"><generatorclass="uuid"/><!--<generatorclass="uuid"/>--><!--随机生成--><!--<generatorclass="assigned"/>--><!--<generatorclass="sequence"/>--><!--<generatorclass="sequence"><param name="sequence_name">aaa</param></generator>--><property name="wname"type="java.lang.String"column="wname"></property></class></hibernate-mapping>

Util包

packagecom.pyc.first.util;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;/** * 本工具类的作用 * 1.简化代码的书写 * 2.检测hibernate相关的配置是否正确 * * @author 96345 * */publicclassSessionFactoryUtils{privatestaticSessionFactory sessionFactory;static{Configuration cfg=newConfiguration().configure("/hibernate.cfg.xml");sessionFactory=cfg.buildSessionFactory();}//开启publicstaticSessionopenSession(){Session session=sessionFactory.getCurrentSession();if(session==null){session=sessionFactory.openSession();}returnsession;}//关闭publicstaticvoidcloseSession(){Session session=sessionFactory.getCurrentSession();if(session!=null&&session.isOpen()){session.close();}}publicstaticvoidmain(String[]args){Session session=SessionFactoryUtils.openSession();session.beginTransaction();System.out.println(session.isConnected());SessionFactoryUtils.closeSession();System.out.println(session.isConnected());}}

Demo包
DemoDao.java

packagecom.pyc.first.dao;importjava.io.Serializable;importorg.hibernate.Session;importorg.hibernate.Transaction;importcom.pyc.first.entity.Student;importcom.pyc.first.entity.Worker;importcom.pyc.first.util.SessionFactoryUtils;publicclassDemoDao{/** * 添加学生 * @param stu * @return */publicSerializableaddStu(Student stu){Session session=SessionFactoryUtils.openSession();Transaction transaction=session.beginTransaction();//开启事务Serializable save=session.save(stu);//返回事务transaction.commit();SessionFactoryUtils.closeSession();returnsave;}/** * 添加工人 * @param work * @return */publicSerializableaddWork(Worker wor){Session session=SessionFactoryUtils.openSession();Transaction transaction=session.beginTransaction();Serializable save=session.save(wor);transaction.commit();SessionFactoryUtils.closeSession();returnsave;}}

DemoDaoTest.java

packagecom.pyc.first.dao;importjava.io.Serializable;importorg.junit.After;importorg.junit.Before;importorg.junit.Test;importcom.pyc.first.entity.Student;importcom.pyc.first.entity.Worker;publicclassDemoDaoTest{privateDemoDao demoDao=newDemoDao();@BeforepublicvoidsetUp()throwsException{// System.out.println("测试所有要测试的方法之前都会执行的内容(一般用来初始化数据所用)");}@AfterpublicvoidtearDown()throwsException{// System.out.println("测试所有要测试的方法之后都会执行的内容(一般用来释放资源所用)");}@TestpublicvoidtestAddStu(){Student stu=newStudent();stu.setSname("rich brian");stu.setSid(73);demoDao.addStu(stu);}@TestpublicvoidtestAddWorker(){Worker worker=newWorker();worker.setWname("ice gream");worker.setWid("100 DEGREES");Serializable wid=demoDao.addWork(worker);System.out.println(wid);}publicvoidtestAddWork(){Worker worker=newWorker();worker.setWname("冲冲冲");demoDao.addWork(worker);}}

Id包:
Myts.java:(公司名_模块名_时间戳)

packagecom.pyc.first.id;importjava.io.Serializable;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.hibernate.HibernateException;importorg.hibernate.engine.spi.SharedSessionContractImplementor;importorg.hibernate.id.IdentifierGenerator;publicclassMytsimplementsIdentifierGenerator{@OverridepublicSerializablegenerate(SharedSessionContractImplementor session,Object object)throwsHibernateException{SimpleDateFormat sdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");return"book_category_"+sdf.format(newDate());}}

testAddStu图片结果:

testAddWork:

<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="com.pyc.first.entity.Worker"table="t_hibernate_worker"><id name="wid"type="java.lang.String"column="wid"><!--<generatorclass="uuid"/>-->//注释<!--<generatorclass="assigned"/>--><!--<generatorclass="sequence"/>--><!--<generatorclass="sequence"><param name="sequence_name">aaa</param></generator>--><generatorclass="com.pyc.first.id.Myts"/>//放开</id><property name="wname"type="java.lang.String"column="wname"></property></class></hibernate-mapping>


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 17:12:26

ClickHouse从入门到放弃的五个陷阱:运维经验和教训的集中总结

ClickHouse从入门到放弃的五个陷阱&#xff1a;运维经验和教训的集中总结 ClickHouse以极致的查询性能著称&#xff0c;但"高性能"三个字的背后是一个"高门槛"的运维现实。过去一年&#xff0c;团队在ClickHouse运维中踩过的坑&#xff0c;几乎每一个都足以…

作者头像 李华
网站建设 2026/7/28 17:11:43

五大神经网络架构核心原理与PyTorch实战:从CNN到Transformer

如果你刚接触深度学习,面对 CNN、RNN、GAN、Transformer 这些名词,是不是感觉像在听天书?为什么一个叫“神经网络”的东西,既能看懂图片,又能生成文本,甚至还能创作音乐?它背后到底有什么魔力,能“学习”几乎任何东西? 很多人以为神经网络是某种神秘的黑盒,或者认为…

作者头像 李华
网站建设 2026/7/28 17:09:31

空间转录组之后,组织原位空间蛋白组学还能补充什么?

空间转录组技术&#xff08;如Visium、Xenium、CosMX等&#xff09;能够帮助研究者在组织切片中定位基因表达的空间分布&#xff0c;识别不同区域的转录特征。然而&#xff0c;基因表达的空间格局只是组织微环境复杂信息的一部分。当空转结果提示了某些值得关注的空间现象后&am…

作者头像 李华
网站建设 2026/7/28 17:06:45

我用 Nix 重写 Docker 镜像构建,把镜像从 1.2GB 压到 80MB 且可复现

我用 Nix 重写 Docker 镜像构建&#xff0c;把镜像从 1.2GB 压到 80MB 且可复现 说实话&#xff0c;我一开始是拒绝用 Nix 的。 那天我们项目的 Node.js 镜像在生产环境又出问题了——同样是 node:20-slim 基础镜像&#xff0c;同样是 package.json 没变&#xff0c;但 CI 流水…

作者头像 李华
网站建设 2026/7/28 17:06:23

AI精准优化RNA翻译效率:从9个核苷酸位点突破生物技术瓶颈

你有没有想过,为什么有些疫苗研发出来,效果就是不如预期?问题可能出在你看不见的“翻译”环节上。 我们通常认为,只要设计出能编码目标蛋白的RNA序列,交给细胞去生产就行了。但现实是,大量的RNA分子在进入细胞后,就像一封写满了正确指令却无法被机器读取的信件,被直接…

作者头像 李华