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 这个是关键
- HDUOJ------(1272)小希的迷宫
- HDUOJ ---1269迷宫城堡
- HDUOJ---1213How Many Tables
- hduoj----(1033)Edge
- HDUOJ----(1031)Design T-Shirt
- HDUOJ----(1030)Delta-wave
- 身份切换脚本,免登入切换权限的利器
- HDUOJ---What Are You Talking About
- HDUOJ-----(1251)统计难题
- HDUOJ-----1541 Stars
- HDUOJ--------(1198)Farm Irrigation
- NYOJ-------三角形
- HDUOJ-------(1022)Train Problem I
- NYOJ-----素数环
- 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 数组属性和方法