java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例
时间:2022-04-24
本文章向大家介绍java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
接上回继续,TMP_EMP中的ID是根据序列SQ_TMP_EMP来生成的,需要在TmpEmp.hbm.xml中设置:
<id name="id" type="long">
<column name="ID" not-null="true" sql-type="NUMBER" unique="true"/>
<generator class="sequence">
<param name="sequence">SQ_TMP_EMP</param>
</generator>
</id>
这样运行时,Hibernate就会自动从SQ_TMP_EMP中取nextval用来填充到ID字段中
示例代码:
先创建一个工具类
package app;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private HibernateUtils(){
}
static SessionFactory sessionFactory;
/*
* 取得Hibernate的Session
*/
public static Session getSession(){
if (sessionFactory == null) {
sessionFactory = new Configuration().configure().buildSessionFactory();
}
return sessionFactory.openSession();
}
/*
* insert记录
*/
public static boolean addObject(Object obj){
Session ss = null;
Transaction ts = null;
boolean result = false;
try
{
ss = getSession();
ts = ss.beginTransaction();
ss.save(obj);
ts.commit();
result = true;
}
finally{
ss.close();
}
return result;
}
}
添加记录的类
package app;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import domain.TmpEmp;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class Hello {
/**
* @param args
*/
public static void main(String[] args) {
TmpEmp emp = new TmpEmp();
emp.setName("张三峰");
emp.setSalary(new BigDecimal(1000));
emp.setSex('M');
emp.setBirthday(new Date(1985-1900,12-1,1));//1985-12-1号
boolean b = HibernateUtils.addObject(emp);
if (b){
System.out.println("插入成功,新记录的ID是:" + emp.getId());
}
else{
System.out.println("插入失败!");
}
}
}
运行结果:
Hibernate: select IGSA.SQ_TMP_EMP.nextval from dual Hibernate: insert into IGSA.TMP_EMP (NAME, BIRTHDAY, SEX, SALARY, ID) values (?, ?, ?, ?, ?) 插入成功,新记录的ID是:210
当然,除用.hbm.xml来配置外,等效的注解方式,可以参考下面的写法:
1 @Id
2 @SequenceGenerator(name="bkdex_seq_generator",sequenceName="SQ_BKD_EX")
3 @GeneratedValue(generator="bkdex_seq_generator",strategy=GenerationType.SEQUENCE)
4 @Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
5 public BigDecimal getId() {
6 return this.id;
7 }
基本上这样就行了,但是实际运行会发现sequence每次并不是加1,而是一个其它的数,如果想要每次加1,参考下面这样:
1 @Id
2 @SequenceGenerator(name = "SEQ_ORDER", sequenceName = "SEQ_ORDER", allocationSize = 1)
3 @GeneratedValue(generator = "SEQ_ORDER", strategy = GenerationType.SEQUENCE)
4 @Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
5 public BigDecimal getId() {
6 return this.id;
7 }
allocationSize=1 这个是关键
- VXFS启用异步IO导致的严重问题(r2笔记56天)
- 通过sql语句分析足彩(r2笔记55天)
- 关于验证表中有无数据的方法比较(r2笔记54天)
- 海量数据迁移之分区并行抽取(r2笔记53天)
- 海量数据迁移之外部表切分(r2笔记52天)
- 怎样突破表名30个字符的限制(r2笔记51天)
- C/C++——排序
- 关于move tablespace的问题总结(r2笔记50天)
- 一些极度危险的linux命令(r2笔记49天)
- 挑战数据结构与算法面试题——80题全解析(一)
- 关于操作失误的数据修复(r2笔记48天)
- 挑战数据结构与算法面试题——80题全解析(三)
- 巧用rowid简化sql查询(r2笔记47天)
- 算法类面试题解析——美团2016校招:棋子翻转
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。
- sklearn 模型的保存与加载
- R:如何使用RMarkdown渲染中文pdf报告
- 图解 SQL,这也太形象了吧!
- 用python爬取前程无忧网,看看我们是否真的“前程无忧”?
- 超硬核的 Python 数据可视化教程!
- Spark Core项目实战 | Top10 热门品类
- Spark Core项目实战 | 页面单跳转化率统计
- Chrome DevTools 全攻略!助力高效开发
- 终于有人把 Docker 讲清楚了,别再说不会 Docker 了!
- 如何在ggplot2图形上添加显著性差异注释?
- 动态曲线图(linechart)--Matplotlib绘制
- 分布式事务、分布式锁、分布式session
- Redis为什么变慢了?常见延迟问题定位与分析
- PyTorch Trick集锦